Tomcat无法以OOM开头

时间:2019-02-06 06:32:10

标签: tomcat web out-of-memory

即使系统中有足够的内存并且正确提供了所有必需的内存设置,Tomcat也无法从OOM开始。事实并非始终如此,这证明tomact配置没有问题。

15-Jan-2019 20:17:31.018 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /opt/tomcat/webapps/XWY.war has finished in 66,068 ms
15-Jan-2019 20:17:31.192 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-61480]
15-Jan-2019 20:17:31.305 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [https-jsse-nio-61443]
15-Jan-2019 20:17:31.362 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 252145 ms
15-Jan-2019 21:49:18.821 SEVERE [125] org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run Unexpected death of background thread ContainerBackgroundProcessor[StandardEngine[Catalina]]
 java.lang.OutOfMemoryError: Java heap space
    at java.util.TreeMap.put(TreeMap.java:577)
    at java.util.TreeSet.add(TreeSet.java:255)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
    at java.util.TreeSet.addAll(TreeSet.java:312)
    at org.apache.catalina.webresources.Cache.backgroundProcess(Cache.java:185)
    at org.apache.catalina.webresources.StandardRoot.backgroundProcess(StandardRoot.java:601)
    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5564)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1373)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1345)
    at java.lang.Thread.run(Thread.java:748)

Tomcat版本是8.5.8。
Java版本: _JAVA_OPTIONS:-Xms1024m -Xmx3072m openjdk版本“ 1.8.0_191” OpenJDK运行时环境(内部版本1.8.0_191-b12)OpenJDK 64位服务器VM(内部版本25.191-b12,混合模式)。

1 个答案:

答案 0 :(得分:1)

从注释中总结一些技术,以及此处的一些其他步骤。没有人会为您提供最终答案,为什么您会得到一个OOME,您需要自己深入研究:

  • 可能的错字:请确保它不是那么简单:您提到了JAVA_OPTIONS,但实际上是JAVA_OPTS。好吧,实际上,这还不是:
  • 特别是对于tomcat:使用CATALINA_OPTS代替JAVA_OPTS。这样只会设置用于启动Tomcat的内存,而需要较少的内存来运行(例如)关闭进程。
  • -Xms-Xmx设置为相同的值:如果计划最终提供-Xmx内存,则最好确保Java可以分配在启动过程中记忆。否则,您可能会在周日晚上3点进入不可用的OS内存。
  • 使用jconsole或类似工具连接到正在运行的进程,确定内存模式:看起来内存使用量不断增加吗?您的应用可能存在内存泄漏。
  • 在应用程序上运行事件探查器,以识别潜在的内存泄漏

奇怪的是,我找不到有关如何解决OOME的stackoverflow的规范问题-我的初衷是建议将其作为重复项关闭。