我们的服务器应用程序似乎行为正常了一段时间,但过了一段时间幸存者空间填充高达100%,从那时起,堆使用量增加,GC周期(包括次要和主要)变得越来越频繁最终堆耗尽。
以下是' jstat -gcutil<的一部分pid> 1000'输出:
S0 S1 E O P YGC YGCT FGC FGCT GCT
100.00 0.00 99.17 48.34 59.93 7014 11777.197 345 554.945 12332.143
100.00 0.00 99.17 48.34 59.93 7014 11777.197 345 554.945 12332.143
100.00 0.00 99.17 48.34 59.93 7014 11777.197 345 554.945 12332.143
100.00 0.00 99.17 48.34 59.93 7014 11777.197 345 554.945 12332.143
100.00 6.02 100.00 48.55 59.93 7015 11777.197 345 554.945 12332.143
0.00 100.00 1.30 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 10.74 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 19.16 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 27.72 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 37.43 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 45.76 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 55.35 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 63.05 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 72.27 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 81.21 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 90.46 50.43 59.93 7015 11778.699 345 554.945 12333.644
0.00 100.00 100.00 50.43 59.93 7016 11778.699 345 554.945 12333.644
80.16 100.00 100.00 50.53 59.93 7016 11778.699 345 554.945 12333.644
100.00 0.00 5.96 51.79 59.93 7016 11780.080 345 554.945 12335.026
100.00 0.00 7.73 51.79 59.93 7016 11780.080 345 554.945 12335.026
100.00 0.00 7.73 51.79 59.93 7016 11780.080 345 554.945 12335.026
100.00 0.00 7.73 51.79 59.93 7016 11780.080 345 554.945 12335.026
我的问题是这种应用程序行为背后的主要原因是什么?是太小的年轻空间或堆,一些其他JVM参数,还是只是一个普通的旧内存泄漏?
解决此问题,GC调整或应用程序重构的最佳策略是什么?
JDK 1.6,HP-UX,Xmx / Xms 1G,Xmn 264M,+ UseConcMarkSweepGC,+ UseParNewGC
非常感谢
答案 0 :(得分:1)
普通的旧内存泄漏,如果您使用的任何库已经泄漏,我会搜索。
是否有任何批处理作业被激活?