jps
输出JVM中运行的进程状态信息
jps [-q] [-mlvV] [<hostid>]
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数
jstack
主要用来查看某个Java进程内的线程堆栈信息
jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
ps、top、printf、jstack、grep 等联合使用可以定位到线程堆栈和具体执行代码。例如查找某个 java 进程中 cpu 消耗最多的 java 线程,并定位堆栈信息。
- ps 查找 java 进程 pid
- top 查找 java 进程最耗费 cpu 的线程
top -Hp pid
-H 显示线程信息
-p 指定进程
- 找到线程 id 后转化成十六进制
printf "%x\n" thread-id
- jstack 定位堆栈
jstack pid | grep thread-id-ox -A 5
jmap(Memory Map) and jhat(Java Heap Analysis Tool)
jmap用来查看堆内存使用状况,一般结合jhat使用。
jmap [option] pid
jmap [option] executable core
jmap [option] [server-id@]remote-hostname-or-ip
打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息:
jmap -permstat pid
查看进程堆内存使用情况,包括使用的 GC 算法、堆配置参数和各代中堆内存使用情况:
jmap -heap pid
查看堆内存中的对象数目、大小统计直方图:
jmap -histo[:live] pid
版权声明:本文为yuchuanchen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。