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、结论及解决
代码问题:包房的接口查询东西太多了
解决:修改优化代码