JVM相关命令与常见问题定位过程

相关命令

jps命令

java提供的一个显示当前所有java进程pid的命令

参数:

-q:只显示pid
-m:输出传递给main方法的参数
-l:输出应用程序main class的完整package名或者应用程序的jar文件完整路径名
-v:显示JVM参数

参考链接:

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:查看线程情况

你可能感兴趣的:(JVM相关命令与常见问题定位过程)