如何 dump jvm 內存及線程棧


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

https://www.cnblogs.com/leefreeman/p/7464179.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM