内存溢出
1. Full GC次数过多
使用top命令查看系统CPU的占用情况
top -Hp 9
查看GC的情况
jstat -gcutil 9 1000 10
如果是Full GC次数过多,那么通过jstack得到的线程信息会是类似于VM Thread之类的线程,而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息。
1.使用top -c 查看CPU 占用情况 ,按P(大写)可以倒序查看占CPU占用率
2.找到占用率高的进程以后,再定位到具体线程
比如 此时进程ID 14724 CPU占用高,进一步使用top -Hp 14724定位该进程内所有的线程使用情况
3.定位到该进程内,15153 的线程CPU占用高,进一步分析内存堆栈的情况
1.使用jstack -l 14724 (进程id) > 14724.stack 将进程内的线程情况乱重定向到14724.stack这个文件,方便查看
2.将线程15153转换为16进制数(这里 我使用python的内置函数 hex())进行转换
3.使用cat -14172.stack | grep '0x3b31' 查看该线程打印出来的堆栈信息