1.1 jps
类似Linux的ps,但是jps只用于列出Java的进程 可以方便查看Java进程的启动类,传入参数和JVM参数等 直接运行,不加参数,列出Java程序的进程ID以及Main函数等名称
1.2 jstat
用于观察Java应用程序运行时信息的工具,详细查看堆使用情况以及GC情况
1.2.1 jstat -class pid
显示加载class的数量及所占空间等信息
1.2.2 -gc pid
可以显示gc的信息,查看gc的次数及时间
1.2.3 -gccapacity
比-gc多了各个代的最大值和最小值
-gccause
最近一次GC统计和原因
- LGCC:上次GC原因
- GCC:当前GC原因
jstat -gcnewcapacity pid:new对象的信息及其占用量
-gcutil
显示GC回收相关信息
-printcompilation
当前VM执行的信息
还可以同时加两个数
1.3 jinfo
jinfo <option> <pid>
查看正在运行的Java程序的扩展参数,甚至在运行时修改部分参数
查看运行时参数
代码语言:javascript复制jinfo -flag MaxTenuringThreshold 31518
-XX:MaxTenuringThreshold=15
在运行时修改参数值
代码语言:javascript复制> jinfo -flag PrintGCDetails 31518
-XX:-PrintGCDetails
> jinfo -flag PrintGCDetails 31518
> jinfo -flag PrintGCDetails 31518
-XX: PrintGCDetails
1.4 jmap
生成堆快照和对象的统计信息
获得堆快照文件之后,我们可以使用多种工具对文件进行分析,例如jhat,visual vm等。
1.5 jhat
分析Java应用程序的堆快照文件,以前面生成的为例
jhat在分析完成之后,使用HTTP服务器展示其分析结果,在浏览器中访问http://127.0.0.1:7000/即可得到分析结果。
1.6b jstack
导出Java应用程序的线程堆栈
jstack -l <pid>
jstack可以检测死锁,下例通过一个简单例子演示jstack检测死锁的功能。java代码如下:
从这个输出可以知道: 1、在输出的最后一段,有明确的"Found one Java-level deadlock"输出,所以通过jstack命令我们可以检测死锁 2、输出中包含了所有线程,除了我们的north,sorth线程外,还有"Attach Listener", “C2 CompilerThread0”, "C2 CompilerThread1"等等; 3、每个线程下面都会输出当前状态,以及这个线程当前持有锁以及等待锁,当持有与等待造成循环等待时,将导致死锁