相关命令
jps命令
java提供的一个显示当前所有java进程pid的命令
参数:
-q:只显示pid
-m:输出传递给main方法的参数
-l:输出应用程序main class的完整package名或者应用程序的jar文件完整路径名
-v:显示JVM参数</pre>
参考链接:
Java命令学习系列(一)——Jps-HollisChuang's Blog
jstat命令
# 垃圾回收统计
jstat -gc pid 250 20:查询进程xxx的垃圾收集情况,每250毫秒查询一次,一个查询20次。
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcutil pid 250 20:查询GC总体使用情况(百分比)
jstat -gccause pid:额外输出上次GC原因
特别的:
Allocation Failure:
表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
jinfo命令(jdk8后官方抛弃)
可以用来查看正在运行的java应用程序的扩张参数,包括java system属性和JVM命令行参数,也可以动态的修改正在运行的JVM的一些参数。
用法 | 说明 | 举例 |
---|---|---|
jinfo pid | 输出当前JVM进程的全部参数和系统属性 | jinfo 11772 |
jinfo -flag name pid | 输出对应名称的参数 | jinfo -flag PrintGC 11772 |
jinfo -flag [+|-]name pid | 开启或者关闭对应名称的参数(动态修改参数) | jinfo -flag -PrintGC 11772 |
jinfo -flag name=value pid | 修改指定参数的值(动态修改参数) | jinfo -flag HeapDumpPath=C:\error.hprof 11772 |
jinfo -flags pid | 输出全部的参数 | jinfo -flags 11772 |
jinfo -sysprops pid | 输出当前JVM进程的全部系统属性 | jinfo -sysprops 11772 |
参考链接:jvm 性能调优工具之 jinfo - 简书 (jianshu.com)
jstack
生成当前时刻的线程快照
- jstack pid:查看线程情况
jmap
将内存使用的详细情况输出到文件
- jmap -dump:format=b,file=heapDump pid:输出到文件heapDump
jhat
Jhat分析Jmap打印出的堆快照信息
- jhat 文件名:启动了一个http服务,端口默认是7000,可以使用http://127.0.01:7000/进行访问
信息比较大,得对具体代码有针对的分析,分析哪些对象无法回收的情况
常见问题定位过程
频繁GC或内存溢出
jps:查看pid
jstat -gc pid 250 20:查看gc情况
jstat -gccause pid:查看上次gc原因
jmap -dump:format=b,file=heapDump pid:生成堆转储文件
使用jhat分析堆情况
结合代码解决内存溢出或泄漏问题。
死锁问题
jps:查看pid
top -H -p pid:查看哪个线程CPU使用率高
printf %x 线程id:获取十六进制线程id
jstack pid|grep 十六进制线程id:查看线程情况