【问题标题】:Does JVM reboot when 100% tenured heap is used使用 100% 终身堆时 JVM 是否会重新启动
【发布时间】:2015-06-18 16:47:59
【问题描述】:

我有一个测试系统,我看到永久堆使用率增加到 100%,然后回落到 ~50%。这种情况不断发生。

应用程序使用以下 JVM 参数启动:

-Xms512M -Xmx512M -ea -XX:OnOutOfMemoryError=/bin/kill -9 %p

我没有看到通常在应用程序重新启动时出现的任何日志。

【问题讨论】:

  • “我看到永久堆使用率增加到 100%” 是在完全 GC 之前还是之后达到 100%?

标签: garbage-collection jvm heap-memory jvm-arguments


【解决方案1】:

你为什么要杀死OutOfMemoryError 上的进程?相反,您为什么不收集堆转储文件并查看它为何已满?

Use: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/your/preferred/dumplocation

并使用 Eclipse MAT 打开生成的转储文件。

另外,我认为该选项需要被引用:

"-XX:OnOutOfMemoryError=kill -9 %p"

关于您的问题:不,该进程不会重新启动 - 它只会在永久堆被填满时终止。

【讨论】:

  • 我会这样做,但需要一段时间才能使用 100% 的永久堆。还有其他方法可以调试吗?
  • 您可以通过将分配的内存从 512m 减少到像 256m 这样更小的东西来进一步限制堆 - 但这可能会进一步掩盖问题。我会耐心等待,按照我上面的建议去做。
  • 但我的问题仍然存在,如果 100% 使用了终身堆,我的进程会使用这些 java args 集重新启动吗?
  • JVM 永远不会自动重启。如果你的重启 - 你必须在调用者周围有一些脚本这样做。
猜你喜欢
  • 2011-08-29
  • 2015-08-12
  • 2018-03-06
  • 2014-08-16
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多