1. dump jvm 内存
命令格式:
jmap -dump:format=b,file=dump_file_name pid
jmap -dump:live,format=b,file=heap.hprof 27019
举例:dump pid 为 3239 的 java 进程的内存到 aa.txt 文件
jmap -F -dump:format=b,file=aa.txt 3239
2. dump jvm 线程栈
命令格式:
jstack pid > dump_file_name
举例:dump pid 为 3239 的 java 进程的线程栈到 bb.txt 文件
jstack -F 3239 > bb.txt
说明:-F 代表强制
3.jstat:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况。
jstat -gcutil 27019 2000 5 代表 每2000毫秒输出一次进程id为21019服务的内存使用情况,共输出5次。其意义为:
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:伊甸园区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
实际问题分析:内存问题还是线程问题。
top -p pid 查看该服务的内存和cpu使用情况
jstack pid > dump_file_name 导出线程文件,分析线程情况。
一般分析步骤:
jps 获取pid
top -Hp pid 查看最消耗cpu的线程
printf “%x ” tid 得到16进制的线程id
jstack pid | grep tid(16进制) 查看最消耗cpu的线程的方法。
jstat –gcutil pid 详解查看一下链接:
https://blog.csdn.net/zhaozheng7758/article/details/8623549
转载自:https://blog.csdn.net/qianghaohao/article/details/80379118