4

I need to disable the GC Overhead limit in my CentOS server. The reason for this is to temporarily prevent java.lang.OutOfMemoryError: GC overhead limit exceeded exceptions.

But i'm a zero at Linux + Java systems and don't have any clue on how to run this command line: -XX:-UseGCOverheadLimit

4

1 回答 1

8

您需要将它作为参数传递给 JVM。你说你在 Apache Tomcat 中托管一个 webapp。您可以将环境变量设置CATALINA_OPTS为 equal -XX:-UseGCOverheadLimit。如果您将它作为服务运行,则必须在实际启动 tomcat 的脚本中执行此操作,实际上 CentOS 的 Tomcat 脚本中可能有一个CATALINA_OPTS您可以添加或设置的变量。

话虽如此,消除垃圾收集器由于开销而引发 OutOfMemoryError (OOME) 的能力可能无法解决问题。由于开销导致的 OOME 基本上意味着由于 GC 操作花费了大量时间,程序没有取得任何有用的进展。当可用内存非常低并且必须经常进行大量完整的 GC 传递时,可能会发生这种情况。如果您禁用该错误,则程序可能会变得无响应,然后最终在将来某个未定义的点实际耗尽堆中的内存,这仍然会导致 OOME 被抛出堆空间而不是开销。

更好的解决方案是通过使用 -Xmx 参数(再次传入 via CATALINA_OPTS)设置来增加 Tomcat 允许使用的内存量。-Xmx2g例如,将最大堆设置为 2 GiB。

于 2013-09-21T15:53:26.623 回答