JVM —— 内存泄漏排查及jps、jstat、jstack、jmap、jprofiler的使用

JVM —— 内存泄漏排查及jps、jstat、jstack、jmap、jprofiler的使用


jps(启动参数查看)

# 找个java
> ps -ef | grep java
501 35512 36218   0 12:07下午 ttys004    0:00.00 grep java
# 吧啦吧啦,这是我的nacos -> PID:36266
501 36266     1   0 171221  ttys004   84:40.39 .....
# 查看启动项方式1
> jinfo -flags 36266
......
......
# 查看启动项方式2
> jps -v | grep 36266
36266 nacos-server.jar -Djava.ext.dirs=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ext:/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/ext -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xloggc:/Users/changyang/tools/nacos-2.0.3/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/Users/changyang/tools/nacos-2.0.3/plugins/health,/Users/changyang/tools/nacos-2.0.3/plugins/cmdb -Dnacos.home=/Users/changyang/tools/nacos-2.0.3

jstat(内存分析)

  • 分析某进程的情况
# 查看内存使用情况
> jstat -gcutil 36266

S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
0.00  67.90  15.80  42.42  95.45  94.05    123    2.726     3    0.267    2.992
标题 解释
S0 新生代中Survivor space 0 区使用空间百分比
新生代堆空间,内存和存放开始都会存在这里
S1 新生代中Survivor space 1 区使用空间百分比
新生代堆空间,内存和存放开始都会存在这里
E 新生代已使用空间百分比
O 老年代已使用空间百分比
M 元数据区已使用空间百分比
CCS 压缩类空间利用率百分比
YGC 从应用程序启动到当前,发生Yang GC 的次数
YGCT 从应用程序启动到当前,发生Yang GC所用的时间(秒)
FGC 从应用程序启动到当前,发生Full GC大的次数
FGCT 从应用程序启动到当前, 发生Full GC所用时间(秒)
GCT 从应用程序启动到当前,用于垃圾回收的总时间(秒)
约等于YGCT+FGCT

jstack

  • 简介
    线程工具
# 查看线程情况
jstack -l 36266
# 会显示当前应用的线程的锁情况

(如果出现锁超时或者出现死锁的情况,在输出的内容中就会打印出锁持有的锁情况,以便排查代码重的错误)


jmap

HeapDump工具,用于查看堆信息,对于JVM调优,需要借助堆信息来进行调优。

# 查看堆信息
> jmap -heap 36266
# 导出堆信息并用jht查看
> jmp -dump:format=b,file=heapDump.hprof pid
> jhat -port 8899 heapDump.hprof
# 然后访问 http://ip:8899即可看到对应的堆信息报告;

jprofiler

Go! JProfiler —> 🏃🏃🏃


总结

  • idea安装一个jprofiler插件,开发过程中可以通过jprofiler启动,随时查看自己内存信息;
  • 生产中加入启动项,设置当发生OOM时,将hprof导出到指定位置,然后通过jprofiler分析hprof;
> java -jar -XX:+HeapDumpOnOutOfMemoryError XX:HeapDumpPath=./heapdump.hprof -jar project.jar

版权声明:本文为Cy_LightBule原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。