即使系统中有足够的内存并且正确提供了所有必需的内存设置,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,混合模式)。
答案 0 :(得分:1)
从注释中总结一些技术,以及此处的一些其他步骤。没有人会为您提供最终答案,为什么您会得到一个OOME,您需要自己深入研究:
JAVA_OPTIONS
,但实际上是JAVA_OPTS
。好吧,实际上,这还不是:CATALINA_OPTS
代替JAVA_OPTS
。这样只会设置用于启动Tomcat的内存,而需要较少的内存来运行(例如)关闭进程。-Xms
和-Xmx
设置为相同的值:如果计划最终提供-Xmx
内存,则最好确保Java可以分配在启动过程中记忆。否则,您可能会在周日晚上3点进入不可用的OS内存。jconsole
或类似工具连接到正在运行的进程,确定内存模式:看起来内存使用量不断增加吗?您的应用可能存在内存泄漏。奇怪的是,我找不到有关如何解决OOME的stackoverflow的规范问题-我的初衷是建议将其作为重复项关闭。