我有一台使用反向代理的 Ubuntu 服务器 12.04,这样 tomcat 就可以在 apache 上运行。我在该机器上有一个 confluence 实例和一个票务系统。所以没什么特别的。
内存为 8GB,对于此用途来说足够了。
有时,尤其是在过去的几天里,我的汇合页面会崩溃。
日志(confluence\logs\catalina.2014-05-06)显示以下内容:
SEVERE: Socket accept failed
java.lang.OutOfMemoryError: Java heap space
那么我该如何避免这种情况?我该如何为该进程提供更多内存。
答案1
在我的系统中我已经编辑了文件
/etc/init.d/tomcat
有这些行
HEAP="-Xms2048m -Xmx2048m"
export JAVA_OPTS="$HEAP"
重新启动 tomcat 后,您可以在状态部分看到分配的内存
答案2
您也可以在tomcat/bin/setenv.sh
文件中执行此操作并重新启动 tomcat:
export JAVA_OPTS="-Xms512m -Xmx1024m"
答案3
错误的原因在于 Java 分配内存的方式。您的应用程序只能使用有限的内存量。此限制是在应用程序启动时指定的。
允许的最大大小是在 JVM 启动期间通过指定 JVM 参数(例如 -Xmx)设置的。如果您未明确设置大小,则将使用特定于平台的默认值。
因此,当您尝试向内存中的堆空间区域添加更多数据,但这些数据的大小大于 JVM 在 Java 堆空间中可以容纳的大小时,将触发“java.lang.OutOfMemoryError: Java heap space”错误。
因此,显而易见的方法是增加(或添加,如果缺失)通过 -Xmx 参数指定的最大可能堆大小。但在许多情况下,您只是隐藏了症状,而不是解决根本问题。要查看 java.lang.OutOfMemoryError:Java 堆空间错误的完整解释,请查看 Plumbr性能调优站点。
答案4
这些答案对我没有用,我试过了,而且有效:
export _JAVA_OPTIONS=-Xmx4096m