有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在CentOS中禁用UseGCOverdelLimit

我需要在我的CentOS服务器中禁用GC开销限制。这样做的原因是为了临时防止java.lang.OutOfMemoryError: GC overhead limit exceeded异常

但是我在Linux+Java系统上是零,对如何运行这个命令行没有任何线索:-XX:-UseGCOverheadLimit


共 (1) 个答案

  1. # 1 楼答案

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

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

    更好的解决方案是通过使用-Xmx参数(再次通过CATALINA_OPTS传入)设置来增加Tomcat允许使用的内存量^例如,{}会将max heap设置为2 GiB