【发布时间】:2010-04-15 15:38:45
【问题描述】:
我们有一个对延迟敏感的应用程序,并且遇到了一些我们不完全理解的与 GC 相关的暂停。我们偶尔会遇到次要 GC,导致应用程序暂停时间比报告的 GC 时间本身长得多。这是一个示例日志 sn-p:
485377.257: [GC 485378.857: [ParNew: 105845K->621K(118016K), 0.0028070 secs] 136492K->31374K(1035520K), 0.0028720 secs] [Times: user=0.01 secs] [Times: user=0.01 secs] , 实数=1.61 秒]
应用程序线程停止的总时间:1.6032830 秒
这里的总暂停时间比报告的 GC 时间长几个数量级。这些是孤立的偶发事件:之前和之后的次要 GC 事件并没有显示出如此大的差异。
该进程在专用机器上运行,具有大量可用内存、8 个内核,运行内核为 2.6.9-89.0.1EL-smp 的 Red Hat Enterprise Linux ES Release 4 Update 8。我们在(32 位)JVM 版本 1.6.0_13 和 1.6.0_18 中观察到了这一点。
我们正在使用这些标志运行:
-server -ea -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:NewSize=128m -XX:MaxNewSize=128m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:-TraceClassUnloading
任何人都可以就这里可能发生的情况和/或进一步调查的一些途径提供一些解释吗?
【问题讨论】:
标签: java performance garbage-collection jvm