GC耗时案例
youngGC耗时长
gc日志:
可以看到墙钟时间real远大于用户态时间user+内核态时间sys。一般real远大于user和sys,有两个原因:
一是因为繁忙的IO操作:当程序存在繁忙的I/O操作(网络IO或磁盘IO)时,会让
real
时间大幅上升。因为在记录GC日志的时候,你的程序进行了磁盘读写,如果同一时间其他IO操作较重,则此时GC事件会延迟,进而影响了最终的real
的值。二是缺乏CPU资源:当程序本身是CPU密集型应用,或机器上其他进程占用了大量的CPU计算资源,则有可能会出现分配不到 CPU cycles的情况,这会让程序挂起,GC所花费的实际时间也将远大于
user
+sys
的值。
首先查看CPU,发现没有异常,再查看磁盘使用情况,发现这段时间的磁盘占用很高,有一个很大的突刺,经过此可以初步判断是由于磁盘IO频繁导致gclog写入磁盘被阻塞。
解决办法可以将gc日志写入temfs,具体可以卸载文件夹:/dev/shm 下。
参考:
http://tang.love/2017/10/22/gc_analysis_user_sys_real/
https://blog.csdn.net/guo8113/article/details/28590963
Last updated