1、top命令定位問題進程
2、查看進程的所有線程信息,記下占用最高的進程
top -Hp 3808055
3、將第2步得到的線程號轉化為十六進制
printf '%x\n' 3808059
4、結果里搜索
jstack 3808055|grep -A 10 3a1b3b
5、定位問題
根據上步搜索到的結果,可以看到是GC線程。因此,需要分析gc情況。
通過 jstat –gcutil 命令查看gc情況,如下
jstat -gcutil 3809524 1000 3
可以看出內存的年輕代和年老帶的利用率都達到了驚人的100%。FGC的次數也特別多,并且在不斷飆升。可以推斷出程序肯定是在哪里的實現有問題,需要重點查看大對象或者異常多的對象信息。此時可以生成headdump文件拿到本地來分析
6、查看對象分配情況
jmap -histo 3809524 |head -n 20
7、使用jmap命令導出heapdump文件,然后拿到本地交給開發分析
jmap -dump:format=b,file=/data/product-engine.hprof 3811139
8、結論及解決
代碼問題:包房的接口查詢東西太多了
解決:修改優化代碼