获得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
答案 0 :(得分:4)
调整GC时,需要在较长时间内收集GC统计信息,然后对其进行操作。只有一个代数大小的快照是不够的。
你应该:
启用完整GC记录。轻巧而强大。
-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
考虑收集有关GC的信息的其他方法。记录很好,但有时可用的轻量级命令行工具可以提供更多的洞察力。例如。热点jstat
将显示你对伊甸园,幸存者和老一代的职业/能力。
计算:
获得此数据后,您可以开始调整Generations并再次监控所做更改的影响。吞吐量的通常的大小调整建议是:
通常,调整建议取决于调整的目标:
另请参阅GC调优问题:Is there a cookbook guide for GC problems?
答案 1 :(得分:1)
在我需要调整这些值的极少数情况下,有一个名为JavaVisualVM的程序,它包含在我认为非常有用的jdk(bin文件夹)中。您可以连接到正在运行的虚拟机并分析其所有运行时参数。
在“插件”部分下,您还可以找到一个非常有用的插件,用于监控gc,您可以在其中查看其中的确切内容。
答案 2 :(得分:1)
一般规则是,在发现需要解决的问题之前,不应更改JVM内存设置。 JVM在调整运行时的大多数参数方面做得非常好,以适应您的应用程序。
如果您发现需要优化内存参数,则取决于您需要优化的内容。您将使用的设置会有很大差异,具体取决于您需要优化的方面(例如,最小化暂停的设置与最大化吞吐量的设置非常不同)。
如果您确实需要进行优化,请提供有关优化所需方面的更多信息。