天天看點

現網問題排查實戰:Jstat,Jstack,Jmap

遇到問題怎麼辦:

檢視日志tail -f catalina.out

檢視應用程序 ps -ef | grep java

檢視CPU情況

檢視TCP情況 ping

檢視java線程,jstack

檢視java堆,jmap

通過memory analyser tool 分析.dat堆檔案,看shallowed heap和retained heap,尋找無法被回收的對象

解決方式:如可以把有問題的對象置為static,每個類隻保有一份

top檢視占用cpu最多的程序

然後top -Hd 檢視某程序下所有線程

nid是作業系統中線程Id,pid是java中線程Id

然後jstack 程序|grep 線程的十六進制數 看具體堆棧

詳情:

top發現系統負載高 (load average和us參數的百分比 )JVM記憶體占用高

jstat -gc pid 檢視JVM記憶體回收情況 發現每5000ms一次full gc

現網問題排查實戰:Jstat,Jstack,Jmap

用jstack可以看到應用線程全部挂起,等待GC後執行

jmap -histo pid檢視程序中對象情況,每個對象有多少執行個體,占用多少記憶體。

jmap -dump:format=b,file= jvm記憶體具體情況

用MemoryAnalyer檢視大對象

解決:

現網問題排查實戰:Jstat,Jstack,Jmap

GC常優化參數:

堆大小

永久代大小

GC線程數