ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java GC定期进入几个完整的GC循环

2019-06-21 14:58:44  阅读:242  来源: 互联网

标签:java multithreading garbage-collection jboss


环境:

sun JDK 1.6.0_16

vm settings:
-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Xms1024 -Xmx1024M -XX:MaxNewSize=448m -XX:NewSize=448m -XX:SurvivorRatio=4(6 also checked) -XX:MaxPermSize=128M

OS: windows server 2003

processor: 4 cores of INTEL XEON 5130,  2000 Hz

我的申请说明:
高强度并发(java 5并发使用)操作每次都通过提交到oracle完成.
它是大约20-30个线程不停地执行任务.

应用程序在JBOSS Web容器中运行.

我的GC开始正常工作,我看到很多小型GC,所有那些时间CPU显示出良好的负载,就像所有4个内核加载到40-50%,CPU图形稳定.

然后,经过1分钟的良好工作后,CPU从2个核心开始从4下降到0%,它的图形变得不稳定,上下移动(“牙齿”).我看到,我的线程运行速度较慢(我有监控),我看到GC在此期间开始产生大量的FULL GC,接下来的4-5分钟这种情况仍然存在,然后在短时间内,如1分钟它恢复了正常状态,但不久之后,所有坏事都重演了.

题:
为什么我这么频繁的全GC?
怎么预防?

我和SurvivorRatio一起玩 – 没有用.

我注意到,该应用程序运行正常,直到第一个FULL GC发生,而我有足够的内存.然后它运行得很糟糕.

我的GC日志:

>开始好
>那么长期的全部GC(其中很多)

1027.861: [GC 942200K->623526K(991232K), 0.0887588 secs]
1029.333: [GC 803279K(991232K), 0.0927470 secs]
1030.551: [GC 967485K->625549K(991232K), 0.0823024 secs]
1030.634: [GC 625957K(991232K), 0.0763656 secs]
1033.126: [GC 969613K->632963K(991232K), 0.0850611 secs]
1033.281: [GC 649899K(991232K), 0.0378358 secs]
1035.910: [GC 813948K(991232K), 0.3540375 secs]
1037.994: [GC 967729K->637198K(991232K), 0.0826042 secs]
1038.435: [GC 710309K(991232K), 0.1370703 secs]
1039.665: [GC 980494K->972462K(991232K), 0.6398589 secs]
1040.306: [Full GC 972462K->619643K(991232K), 3.7780597 secs]
1044.093: [GC 620103K(991232K), 0.0695221 secs]
1047.870: [Full GC 991231K->626514K(991232K), 3.8732457 secs]
1053.739: [GC 942140K(991232K), 0.5410483 secs]
1056.343: [Full GC 991232K->634157K(991232K), 3.9071443 secs]
1061.257: [GC 786274K(991232K), 0.3106603 secs]
1065.229: [Full GC 991232K->641617K(991232K), 3.9565638 secs]
1071.192: [GC 945999K(991232K), 0.5401515 secs]
1073.793: [Full GC 991231K->648045K(991232K), 3.9627814 secs]
1079.754: [GC 936641K(991232K), 0.5321197 secs]

解决方法:

这看起来不像是内存泄漏的情况;很可能所有内存实际上都被JVM使用,这可能解释了频繁的完整GC.你有没有机会产生多个进程?即,而不是一个有20-30个线程的进程,有5个进程每个运行4-5个线程?

另外,有没有理由为什么你有这些NewSize,MaxNewSize和SurvivorRatio JVM参数?你有没有通过那些东西观察到任何显着的性能提升?调整任何应用程序时,我的第一种方法是以最小的调整运行它来运行JVM,并且只有在我新添加的参数确实对当前情况产生影响时才进行更改.

标签:java,multithreading,garbage-collection,jboss
来源: https://codeday.me/bug/20190621/1256446.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有