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\n” 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