获得优化值的必要步骤是什么Xms/Xmx/XX:MaxPermSize
?
当然我可以设置一个大的值,但正如你所知,GC 在大内存中需要时间。什么是当我有时间测试和发现这些值时的一般建议?
例如,下面的数字有帮助吗?
Eden Space heap usage - 42MB / 62MB (used / committed)
Survivor Space heap usage - 8.5MB / 8.5MB (used / committed)
CMS Old Gen heap usage - 100MB / 217MB (used / committed)
Non-heap memory pool usage - 36MB
在调整 GC 时,您需要收集较长时间段内的 GC 统计信息,然后采取行动。仅生成一代大小的一张快照是不够的。
你应该:
-
启用完整 GC 日志记录。轻巧而强大。
- Use
-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
考虑收集有关 GC 信息的其他方法。日志记录很好,但有时可用的轻量级命令行工具可以为您提供更多洞察。例如。jstat
对于热点,它将向您显示伊甸园、幸存者和老一代的占领/容量。
-
Compute:
-
实时数据集, 分配率, and 促销率。这将告诉您是否需要更大的堆或者您的例如。 Young Gen太小,或者你的Survivor空间溢出等等。
-
总GC时间,它应该
- 观察彼尔姆一代的占领
获得这些数据后,您可以开始确定各代的规模,并再次监控所做更改的影响。这常用尺码建议吞吐量为:
-
Old Gen= 1.5-2x 的实时数据集 - 您的数据集应该能够轻松适应 OldGen 空间。
-
Perm Gen= 通常 PermGen 占用的 1.5 倍。
-
年轻一代= 基于分配率。看看你一秒分配了多少,然后看Promotion Rate,通过增加YoungGen来降低Promotion Rate。
-
幸存者空间= 监控任期阈值和晋升率。
一般来说,尺码建议取决于您的调整目标:
-
吞吐量调整- 往上看,
-
Low Latency Tuning - monitor the GC pauses
- Young GC 太长 => 减少 young gen
- Young GC 太频繁 => 增加 young gen
-
足迹调整- 根据LiveDataSet、促销率和分配率调整大小。您可能不需要像吞吐量调整中那样为每个空间添加额外的空间
另请参阅 GC 调优问题:有关于 GC 问题的食谱指南吗? https://stackoverflow.com/q/6871213/772000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)