适用于JVM的堆和旧代的大小调整以用于数据繁重的应用程序

Mov*_*ast 6 java garbage-collection jvm jvm-hotspot

  • 我正在使用JVM运行服务器应用程序sunjava-1.6.0_21.
  • 我的应用程序数据量很大,充当缓存服务器.因此它存储了许多我们不期望在整个应用程序中运行GC的长期生存数据.
  • 我正在设置以下JVM参数-Xmx16384M-Xms16384M.
  • 加载所需数据后,以下是应用程序的内存使用情况
  • 总堆空间是:13969522688
  • 最大堆空间是:15271002112
  • 可用堆空间是:3031718040
  • 长期(旧版)堆存储: Used=10426MB Max=10922MB Used/Max=95%

旧的用法 - 我已经确认这是由于实际数据而且预计不会免费.我的问题是,默认情况下JVM调整堆空间大小(它分配了10922MB旧版本),这在旧版本部分留下了很少的可用空间.

  • 旧版的可用空间会减少对应用程序的影响吗?
  • 如果是,我应该如何处理?我应该尝试使用JVM调整参数,newratio并尝试增加旧版本的可用空间或任何其他方式我应该调整应用程序.

ala*_*inm 3

旧一代可用空间较少会影响应用程序吗?

如果你的终身一代满了,就会发生一次重大的收集,而这种类型的收集成本很高。您可以使用选项 :-verbose:gc-XX:+PrintGCDetails来了解 Full GC 是否发生得太频繁。如果是这种情况,那么它会影响应用程序的性能。

如果是,我该如何处理?我是否应该尝试 JVM 调整参数(如 newratio)并尝试增加旧代的可用空间或我应该调整应用程序的任何其他方式。

您可以尝试 NewRatio,但请记住,如果您的 eden 太短,您的终身生成可能会更快被填满。

总之,您应该使用监视工具来更好地了解必须使用的虚拟机选项。它将轻松地向您展示应用程序执行过程中您的代是如何填充的,它比 gc 日志更容易阅读和理解;)