内存溢出

1. Full GC次数过多

使用top命令查看系统CPU的占用情况

top -Hp 9

查看GC的情况

jstat -gcutil 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' 查看该线程打印出来的堆栈信息

posted @ 2018-04-27 03:36  MrLiJavaEngineer  阅读(91)  评论(0编辑  收藏  举报