现象
系统报警full gc次数过多,每2分钟达到了5~6次,这是不正常的现象
在full gc报警时的gc.log如下:
在full gc报警时的jstat如下:
sudo -u admin -H /opt/taobao/java/bin/jstat -gcutil `pgrep java` 2000 100
此时的cpu如下(基本都是在做gc):
将应用重启后,问题解决
但是当后台执行低价航线更新时,过大概十几个小时后,又出现上述情况!
分析
当频繁full gc时,jstack打印出堆栈信息如下:
sudo -u admin -H /opt/taobao/java/bin/jstack `pgrep java` > #your file path#
可以看到的确是在跑低价信息
另外在应用频繁full gc时和应用正常时,也执行了如下2种命令:
sudo -u admin -H /opt/taobao/java/bin/jmap -histo `pgrep` > #your file path#
sudo -u admin -H /opt/taobao/java/bin/jmap -histo:live `pgrep` > #your file path#(live会产生full gc)
目的是确认以下2种信息:
(1)是否存在某些引用的不正常,造成对象始终可达而无法回收(Java中的内存泄漏)