JVM问题定位分析(一)

最近的测试过程中,我负责的测试模块被其他同事投诉,说我负责的模块经常挂掉。于是我就开始寻找问题的旅程。

1、首先  我开始查找我负责的模块的日志并没有明显异常。那么我的服务为什么会被kill 掉呢??

    执行命令:

dmesg -T |grep -i kill

 

2、分析原因 是内存溢出导致的,那么到底是不是我的服务引起的还没有准确地定位到。接下来我需要看一下gc日志。

 

名词解释:

GC:

表明进行了一次垃圾回收,前面没有Full修饰,表明这是一次Minor GC ,注意它不表示只GC新生代,并且现有的不管是新生代还是老年代都会STW(Stop-The-World)。

Allocation Failure:

YGC 时间过长

Times:real>>user+sys  因此导致失败

ParNew:

    表明本次GC发生在年轻代并且使用的是ParNew垃圾收集器。ParNew是一个Serial收集器的多线程版本,会使用多个CPU和线程完成垃圾收集工作(默认使用的线程数和CPU数相同,可以使用-XX:ParallelGCThreads参数限制)。该收集器采用复制算法回收内存,期间会停止其他工作线程,即Stop The World。

668904K->36553K(670720K):单位是KB

三个参数分别为:GC前该内存区域(这里是年轻代)使用容量,GC后该内存区域使用容量,该内存区域总容量。

1.8041769 -0.8094076 secs :  该内存区域GC耗时,单位是秒

 

803975K->171624K(1526784K):三个参数分别为:堆区垃圾回收前的大小,堆区垃圾回收后的大小,堆区总大小。

0.8094076 secs:该内存区域GC耗时,单位是秒。

[Times: user=0.06 sys=0.00, real=0.81 secs]:分别表示用户态耗时,内核态耗时和总耗时

 

posted @ 2020-10-13 09:39  Emars  阅读(154)  评论(0编辑  收藏  举报