遇到問題怎麼辦:
查看日誌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
用jstack可以看到應用線程全部掛起,等待GC後執行
jmap -histo pid查看進程中對象情況,每個對象有多少實例,佔用多少內存。
jmap -dump:format=b,file= jvm內存具體情況
用MemoryAnalyer查看大對象
解決:
GC常優化參數:
堆大小
永久代大小
GC線程數