Java 在JVM中优化Xms/Xmx/XX:MaxPermSize

Java 在JVM中优化Xms/Xmx/XX:MaxPermSize,java,jakarta-ee,garbage-collection,jvm,Java,Jakarta Ee,Garbage Collection,Jvm,获得优化值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

获得优化值
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

在极少数情况下,我需要调整这些值,有一个名为的程序,它包含在jdk(我认为是bin文件夹)中,我发现它非常有用。您可以连接到正在运行的vm并分析其所有运行时参数


在“插件”部分中,您还可以找到一个非常有用的插件,用于监控gc,您可以在其中查看到底发生了什么。

一般规则是,在发现需要解决的问题之前,不应更改JVM内存设置。JVM在运行时调整大多数参数以适应您的应用程序方面做得非常好

如果发现需要优化内存参数,则取决于需要优化的内容。根据需要优化的方面,您将使用的设置会有很大的不同(例如,最小化暂停的设置与最大化吞吐量的设置非常不同)


如果您确实需要优化,请提供有关您需要优化的方面的更多信息。

在调优GC时,您需要在较长时间内收集GC统计信息,然后采取行动。仅一个生成大小的快照是不够的

你应该:

  • 启用完整GC日志记录。轻而有力

    • 使用
      -XX:+PrintTenuringDistribution-XX:+UnlockDiagnosticVMOptions-XX:+LogVMOutput-XX:LogFile=jvm.log-XX:+HeapDumpOnAutofmemoryError-Xloggc:gc.log-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-showversion
  • 考虑收集GC信息的其他方法。日志记录很好,但有时有一些轻量级命令行工具可以让您更深入地了解情况。例如,
    jstat
    用于热点,该热点将显示伊甸园、幸存者和老世代的职业/容量

  • 计算:

    • 实时数据集分配率,以及推广率。这将告诉你是否需要一个更大的堆,或者你的年轻一代是否太小,或者你的幸存者空间是否溢出,等等
    • 总GC时间,应该是
    • Young GC过于频繁=>增加Young gen
  • 足迹调整-根据LiveDataSet、促销率和分配率调整大小。您可能不需要像吞吐量调整中那样为每个空间添加额外的空间
  • 另请参见GC调优问题:

    有关一些实用信息,请参见GC调优问题: