jstack

分析java程序中cpu占用过高的线程

非 Y 不嫁゛ 提交于 2019-12-19 12:29:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 服务器接收请求响应特别慢,用top一看,服务端的一个java服务占用cpu1800%多(24核心)。 该服务里面跑了很多线程,于是想找到是谁引起的 首先dump出该进程的所有线程及状态 使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈. jstack -l 20228 > xxx.log 将堆栈信息找出来放到日志信息中 2. 使用top命令找到耗cpu的线程 使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高. 是不是很震撼,基本上所有的cpu都快满负荷运行了,这些肯定不是正常的java进程 3. 结合堆栈信息查看 进制转换网站: http://tool.oschina.net/hexconvert/ 用来将进程号转换为16进制 20230 --> 4f06 原来是触发了GC,所以请求都无法及时相应了,接下来要做的就是找找是什么触发了GC 参考: http://www.cnblogs.com/skyaccross/archive/2012/12/22/2829000.html 来源: oschina 链接: https://my.oschina.net/u/2499632/blog/688379

jstack - well-known file is not secure

醉酒当歌 提交于 2019-12-18 13:52:41
问题 I am running tomcat 5.5 on x86_64 CentOS 5.7 using 32-bit Oracle Java 1.6.0. JVM process used by tomcat has 6421 pid. Tomcat is working fine. When run jstack it fails with: [root@mybox ~]# jstack 6421 6421: well-known file is not secure To get any reasonable output, I need to use force option: [root@mybox ~]# jstack -F 6421 Attaching to process ID 6421, please wait... Debugger attached successfully. Server compiler detected. JVM version is 17.0-b16 Deadlock Detection: No deadlocks found. (...

JDK的命令行工具系列 (三) jhat、jstack

一笑奈何 提交于 2019-12-18 11:43:41
jhat: heapdump文件分析工具 在前两篇系列文章 JDK的命令行工具系列 (一) jps、jstat 、 JDK的命令行工具系列 (二) javap、jinfo、jmap 中, 我们已经介绍过了 jps 、 jmap 这些命令行工具的使用, 所以这里就不在多做说明, 直接演示 jhat 的使用。 代码清单: public class JhatDemo { Integer i = 6; public static void main(String[] args) { String str = "qingshanli"; while(true) { System.out.println(str); } } } 命令行下: //查看java进程的pidC:\Users\liqingshan>jps -l 12816 14352 org.apache.catalina.startup.Bootstrap 15924 sun.tools.jps.Jps 14184 JhatDemo 14092 org.jetbrains.jps.cmdline.Launcher //生成heapdump文件, 文件名为JhatDemo_heapdump C:\Users\liqingshan>jmap -dump:format=b,file=JhatDemo_heapdump 14184

How do I create a thread dump via JMX?

霸气de小男生 提交于 2019-12-18 04:54:13
问题 I have a Tomcat running as a Windows Service, and those are known not to work well with jstack. jconsole is working well, on the other hand, and I can see stacks of individual threads (I'm connecting to "localhost:port" to access it). How can I use jconsole or a similar tool to dump all the thread stacks into a file? (similar to jstack) 回答1: You can use the ThreadMXBean management interface. This FullThreadDump class demonstrates the capability to get a full thread dump and also detect

Java 复习 —— 守护线程以及线程监测工具

我的梦境 提交于 2019-12-14 19:12:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、守护线程 Java线程机制分为两种 ,用户线程(User Thread)和守护线程(Daemon Thread)。 用户线程:运行在前台,执行具体的任务。例如:程序的主线程,连接网络的子线程。 守护线程:运行在后台,为其他线程提供服务的。例如:垃圾回收器线程 线程异同:一旦所有的用户线程都运行结束,守护线程会随JVM一起退出,其实这就是守护线程应该的生命周期,因为他是服务于其用户线程的线程,当用户线程一旦执行完毕,守护线程的职责就结束了,理该退出!但是用户线程是不会在主线程结束的时候而退出的。 线程应用:用户线程一般执行在特定的任务上,守护线程一般使用在 数据库连接池中的监测线程,JVM启动后监测线程等。 2、API Thread t1 = new Thread(sample); t1.setDaemon(true); t1.start(); 1)thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。换句话说,你不能把正在运行的常规线程设置为守护线程。 2) 在Daemon线程中产生的新线程也是Daemon的。 3)注意读写操作或者计算逻辑是不能使用守护线程的。因为在Daemon

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解

∥☆過路亽.° 提交于 2019-12-14 05:43:05
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 … 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。 A、 jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息。语法格式如下: jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l 输出main类或Jar的全限名

jstack output - get tid for java Thread.getId

眉间皱痕 提交于 2019-12-13 05:58:44
问题 I had a look at existing questions on getting the thread id like java-thread-id-and-stack-trace . But I'm not able to figure out something that seemed simple. I want to make a JSP tool to stop a thread in Java. I know it's a bad idea in general but we need it as we can't use JConsole in our environment cause some hardening of JBoss. My questions are, take a sample jstack output: Event Batch Processing (Spring UAA/1.0.2)" daemon prio=10 tid=0x0000000041e27800 nid=0x363b waiting on condition

jstack命令:教你如何排查多线程问题

烈酒焚心 提交于 2019-12-12 16:59:27
这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我们可以使用java自带的jstack命令进行排查。 1、先在服务器运行上面的死锁的例子,让程序陷入死锁。 2、使用jps、ps -ef | grep java查看当前java进程的pid,严重情况下可以使用top命令查看当前系统cpu/内存使用率最高的进程pid。 这里我们的死锁的pid是:3429,这里程序很简单,虽然程序死锁,没有占用很多资源。 3、使用top -Hp 3429命令查看进程里面占用最多的资源的线程。 这里我们看到的占用最多资源的线程是:3440。 4、使用命令printf “%x\n” 3440 把线程pid转换成16进制数,得到:d70。 5、使用jstack 3429 | grep -20 d70命令查询该线程阻塞的地方。 到这里就基本跟踪完毕,去代码所在行看看为什么死锁吧。 来源: CSDN 作者: jmlqqs 链接: https://blog.csdn.net/jmlqqs/article/details/103508281

NullPointerException while getting thread dump using jstack

亡梦爱人 提交于 2019-12-11 09:07:27
问题 I'm trying to debug a CPU spike issue. For fetching thread dump, I'm using Jstack which is giving below mentioned error: Thread 1780: (state = IN_JAVA) Error occurred during stack walking: java.lang.NullPointerException at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:78) at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45) at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) at sun.jvm.hotspot.tools.JStack.main(JStack.java:86)

The way to solve cpu load too high of Java application

痞子三分冷 提交于 2019-12-11 01:06:37
问题 Today, I found the cpu of load of my server is too high,and the server is just running a Java application. Here are my operation steps. I used top command to find the application's pid. The pid is 25713. I used top -H -p 25713 command to find some pids which used the most of cpu. Such as 25719 tomcat 20 0 10.6g 1.5g 13m R 97.8 4.7 314:35.22 java . I used jstack -F 25713 command to print the dump info.Such as "Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477