常用JVM診斷命令

top

使用top主要查看各進程CPU、內(nèi)存使用情況。

top命令截圖

top -Hp pid 還可以定位到某個具體線程,測試使用發(fā)現(xiàn)內(nèi)存那列都是一樣的(都顯示的進程占用的內(nèi)存),而CPU是不一樣的,所以top -Hp pid可以查看每個線程的CPU占用情況。
top -Hp pid命令截圖

當進程CPU占用比較高時,可以查看具體哪個線程使用CPU比較高,再通過jstack pid |grep tid的十六進制 -A 30查看線程堆棧信息,從而定位導致CPU占用較高的代碼。

jmap

jmap可以查看堆內(nèi)存初始化配置信息以及堆內(nèi)存的使用情況。


jmap -heap pid命令截圖

我們可以使用 jmap -histo[:live] pid 查看堆內(nèi)存中的對象數(shù)目、大小統(tǒng)計直方圖,如果帶上 live 則只統(tǒng)計活對象。


jmap -histo[:live] pid命令截圖

還可以使用jmap -dump:format=b,file=name.dump pid 導出dump文件,用visualVM軟件進行分析。
當發(fā)生內(nèi)存溢出或老年代占用率過高,可以使用以上命令分析。

jstat

jstat -option可以監(jiān)測 Java 應用程序的實時運行情況,包括堆內(nèi)存信息以及垃圾回收信息,具體選項如下:

  • -class:顯示 ClassLoad 的相關信息;
  • -compiler:顯示 JIT 編譯的相關信息;
  • -gc:顯示和 gc 相關的堆信息;
  • -gccapacity:顯示各個代的容量以及使用情況;
  • -gcmetacapacity:顯示 Metaspace 的大??;
  • -gcnew:顯示新生代信息;
  • -gcnewcapacity:顯示新生代大小和使用情況;
  • -gcold:顯示老年代和永久代的信息;
  • -gcoldcapacity :顯示老年代的大??;
  • -gcutil:顯示垃圾收集信息;
  • -gccause:顯示垃圾回收的相關信息(通 -gcutil),同時顯示最后一次或當前正在發(fā)生的垃圾回收的誘因;
  • -printcompilation:輸出 JIT 編譯的方法信息。
    這里詳細記錄下jstat -gcutil 時間間隔(毫秒)命令,這個命令會持續(xù)輸出堆內(nèi)存各個區(qū)的使用率和垃圾收集情況。
    jstat -gcutil pid 時間間隔(毫秒)命令截圖
  • S0:Survivor S0區(qū)的內(nèi)存使用率。
  • S1:Survivor S1區(qū)的內(nèi)存使用率。
  • E:Eden區(qū)的內(nèi)存使用率。
  • O:老年代的內(nèi)存使用率。
  • P:永久代的內(nèi)存使用率。
  • YGC:Minor GC發(fā)生的次數(shù)。
  • YGCT:Minor GC共消耗的時間(s)。
  • FGC:Full GC發(fā)生的次數(shù)。
  • FGCT:Full GC共消耗的時間。
  • GCT:Minor GC 和 Full GC共消耗的時間。

jstack

jstack pid經(jīng)常用來查看線程的堆棧信息,通常結(jié)合top -Hp pidpidstat -p pid -t來使用,比如通過top -Hp pid定位到了CPU使用率高的線程,再使用jstack pid可以定位CPU使用率高的代碼。

jstack pid命令截圖

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容