【问题标题】:jboss java random Full GC freezing appjboss java随机Full GC冻结应用
【发布时间】:2011-12-13 10:02:42
【问题描述】:

您好,我正在开发平衡 6 个应用程序服务器的 Java 应用程序,我在其中 1 个应用程序服务器中随机冻结了完整的 gc(导致应用程序超时),一天大约 1-2 个应用程序服务器。

GC.log

...

2011-12-13T10:38:36.576+0100: 79825.032: [GC [PSYoungGen: 874833K->66144K(1071936K)] 3516152K->2809316K(3868160K), 0.2535770 secs] [Times: user=0.94 sys=0.00, real=0.25 secs]
2011-12-13T10:38:36.830+0100: 79825.286: [Full GC [PSYoungGen: 66144K->0K(1071936K)] [ParOldGen: 2743171K->2753089K(2796224K)] 2809316K->2753089K(3868160K) [PSPermGen: 283256K->269894K(524288K)], 7.3616280 secs] [Times: user=25.14 sys=0.00, real=7.36 secs]
2011-12-13T10:38:46.152+0100: 79834.608: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2753089K->2751441K(2796224K)] 3505281K->2751441K(3868160K) [PSPermGen: 270340K->269781K(524288K)], 6.6231180 secs] [Times: user=22.52 sys=0.01, real=6.62 secs]
2011-12-13T10:38:54.591+0100: 79843.047: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2751441K->2719651K(2796224K)] 3503633K->2719651K(3868160K) [PSPermGen: 270670K->269784K(524288K)], 5.5780510 secs] [Times: user=19.75 sys=0.01, real=5.58 secs]

...

我的实际解决方法是杀死 jboss 并重新启动它(不是很好的解决方案)。

这是我的系统配置:

Mem: 6 Gb
Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz (4 core)
java version "1.6.0_26"
Scientific Linux release 6.0 (Carbon)
jboss-4.0.5.GA

Jboss参数:

-Xms4G 
-Xmx4G 
-Dsun.rmi.dgc.client.gcInterval=3600000 
-Dsun.rmi.dgc.server.gcInterval=3600000 
-verbose:gc
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:PermSize=512m 
-XX:MaxPermSize=512m 
-XX:+CMSClassUnloadingEnabled 
-XX:+UseCompressedOops 
-XX:+DisableExplicitGC 
-XX:+UseParallelOldGC 
-XX:ParallelGCThreads=4 
-XX:+UseAdaptiveSizePolicy 
-XX:+AggressiveOpts 
-Xdebug

有人可以帮我吗? 谢谢

【问题讨论】:

  • 你可以试试 Java 7 吗?它应该与 GC 一起更顺利地工作
  • 我不建议用 Java 7 运行这个,Jboss 版本太旧了... 就像 Java 7 不支持一样,我什至想知道 jboss 4.0 是否支持 java 6。 5
  • 我不能,因为这是一部作品。
  • @MarkBramnik 有道理,我没有注意到 JBoss 有这么旧的版本。
  • 也许扩展 permsize 一些。另外,我发现 4.0.x 版本的 JBoss 在需要为 JVM 实例找到合适的配置时有点问题(这也是由旧的和大型应用程序引起的)。

标签: java jboss garbage-collection performance


【解决方案1】:

我认为您应该在这里对您的应用程序进行概要分析,恐怕没有其他选择... 没有集群,full-GC 会冻结吗? 您可以尝试使用不同的 GarbageCollector 运行,但这种行为的原因可能是应用程序中某处的内存泄漏,或者至少在内存消耗方面“可疑错误”的对象处理。

您可以做的另一件事是在一天内生成堆转储,看看是否有任何差异可以指出问题。

顺便说一句,我想它是 64 位 java 和 jboss,对吧? :) 对于 32 位应用程序,在同一进程中处理 4 GB 内存有点问题...

【讨论】:

  • 完整的 gc 总是在某个时候停止应用程序,问题是应用程序停止了多长时间。
【解决方案2】:

您是否尝试过使用自适应大小调整策略:-XX:+UseAdaptiveSizePolicy 和 -XX:MaxGCPauseMilis=100 和 -XX:GCTimeRatio=19?

如果这没有帮助,那么 Concurrent Mark Sweep Collector (-XX:UseConcMarkSweepGC)?

如果您有时间看一下题为“我所了解的关于 JVM 性能调优的一切@Twitter”(slides、video)的演示文稿,它解释了在选择 GC 时的权衡。

【讨论】:

  • 如果你这样做,你必须改变 -Xms 使它不等同于 -Xmx。这会禁用 vm 的人体工程学。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多