遇到問題怎麼辦:
檢視日志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
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxMGROl3YU5EMJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1EzN1UDMwMTM5ITNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
用jstack可以看到應用線程全部挂起,等待GC後執行
jmap -histo pid檢視程序中對象情況,每個對象有多少執行個體,占用多少記憶體。
jmap -dump:format=b,file= jvm記憶體具體情況
用MemoryAnalyer檢視大對象
解決:
GC常優化參數:
堆大小
永久代大小
GC線程數