在CentOS中禁用UseGCOverheadLimit

我需要在我的CentOS服务器中禁用GC开销限制。 这样做的原因是暂时阻止java.lang.OutOfMemoryError: GC overhead limit exceededexception。

但是我在Linux + Java系统上是零,并且不知道如何运行这个命令行: -XX:-UseGCOverheadLimit

Solutions Collecting From Web of "在CentOS中禁用UseGCOverheadLimit"

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

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

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