当前位置:   article > 正文

线上项目频繁Full GC问题排查解决_频繁gc如何排查

频繁gc如何排查

现象

发现项目运行一段时间后会莫名其妙的不运行了,没有任何异常日志,好像被hung住了一样,不工作了。

排查

1、首先查看GC日志,通过jstat -gcutil -t pid 1000 1000查看GC日志,看到FullGC的次数达到了接近两万次。。。并且GC速率没有下降的趋势。
2、又通过jmap -heap pid查看堆内存情况,发现Old区Free剩余2M。。
3、通过jmap -hsito pid查看哪些类占用的空间多,看到我们自定义的一个类占用很大,因此定位到是我们项目的代码问题。
4、通过jmap -dump:format=b,file=xxxx.hprofDump下我们的堆内存日志,通过MAT内存分析工具分析日志。查看到MAT帮助分析出来的两个问题。
在这里插入图片描述

第一个为jdbc的JDBC42ResultSet,其所占用的堆内存大小为48.97%,但是Details中并看不到什么有用的信息,因此看另外一个问题,另外一个问题是在一个线程中,进入Details中查看详细信息。
在这里插入图片描述

通过详细信息可看到线程名为task-1的线程中,有一个List,List中有N个我们自定义的类对象,与上边查看类占用内存所查看到类为同一个类,因此确定问题在这里出现,因为线程名为tast-1,我们设置的Spring Schedule的线程名称前缀为task-,再次查看Thread Stack可以定位到具体调用的代码位置,其中有一个定时任务为将表中部分数据取出来进行视频下载的操作,由于网速慢,导致线程一直在执行,并且由于配置原因,定时任务执行频率为4s一次,由于我们的list的循环并没有执行结束,引用一直在,所以不能被回收掉,导致old区占满,所以调整定时任务执行频率,问题解决。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/653742
推荐阅读
相关标签
  

闽ICP备14008679号