我需要在CentOS
服务器中禁用GC开销限制。这样做的原因是暂时防止java.lang.OutOfMemoryError: GC overhead limit exceeded
异常。
但是我在Linux + Java系统上为零,对如何运行此命令行没有任何线索:-XX:-UseGCOverheadLimit
最佳答案
您需要将其作为参数传递给JVM。您说您在Apache Tomcat中托管了一个Web应用程序。您可以将环境变量CATALINA_OPTS
设置为等于-XX:-UseGCOverheadLimit
。如果将它作为服务运行,则必须在实际上启动tomcat的脚本中执行此操作,实际上,CentOS的Tomcat脚本中可能包含CATALINA_OPTS
变量,您可以将其添加或设置。
话虽这么说,消除由于开销而导致垃圾收集器抛出OutOfMemoryError(OOME)的能力可能无法解决问题。由于开销,OOME基本上意味着该程序没有进行任何有益的改进,因为GC操作花费大量时间。当可用内存非常低并且必须频繁进行大量完整的GC传递时,可能会发生这种情况。如果禁用此错误,则可能导致程序无响应,然后最终在将来某个未定义的点实际耗尽堆中的内存,这仍然会导致OOME抛出堆空间而不是开销。
更好的解决方案是通过使用-Xmx参数(再次通过CATALINA_OPTS
传递)进行设置来增加允许Tomcat使用的内存量。例如,-Xmx2g
将最大堆设置为2 GiB。