代码之家  ›  专栏  ›  技术社区  ›  Ricky

在CentOS中禁用UseGCOverheadLimit

  •  4
  • Ricky  · 技术社区  · 12 年前

    我需要在我的 CentOS 服务器这样做的原因是暂时阻止 java.lang.OutOfMemoryError: GC overhead limit exceeded 例外情况。

    但我对Linux+Java系统一无所知,对如何运行此命令行一无所知: -XX:-UseGCOverheadLimit

    1 回复  |  直到 12 年前
        1
  •  8
  •   Roland Ewald    10 年前

    您需要将它作为一个参数传递给JVM。你说你在Apache Tomcat中托管了一个网络应用程序。您可以设置环境变量 CATALINA_OPTS 等于 -XX:-UseGCOverheadLimit 。如果您将tomcat作为服务运行,则必须在实际启动tomcat的脚本中执行此操作,而事实上,适用于CentOS的tomcat脚本可能有 加泰罗尼亚港口 变量,您可以将其添加到或设置。

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

    一个更好的解决方案是通过使用-Xmx参数(再次通过 加泰罗尼亚港口 ). -Xmx2g 例如将最大堆设置为2GiB。