我正在尝试对SpringBoot应用程序的OnOutOfMemoryError执行kill命令。下面是具有命令的.conf文件。
JAVA_OPTS="-Xmx512M -XX:OnOutOfMemoryError="kill $(lsof -t -i:8080)""
如果我将Spring引导应用程序作为";java-jar";使用Java Hostspot VM命令,它可以很好地工作,但当作为Linux系统服务运行时,应用程序不会被杀死。
Exception : "Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space"
在我的场景中,我使用tomcat在docker群中的一个容器运行GeoServer的一个实例。
我希望swarm在这个实例出现任何问题后重新创建容器,但在OutOfMemory错误后,容器将永远不会重新启动,因为JVM仍在运行,尽管应用程序不再响应。对于这种情况,我使用OnOutOfMemoryError,并且在这种类型的错误之后容器被消除,这样群就可以重新创建它
Tomcat环境中设置JVM参数。
CATALINA_OPTS="-XX:OnOutOfMemoryError="kill -9 %p"
-Djava.awt.headless=true
-Dfile.encoding=UTF-8 -server
-Xms1024m -Xmx3072m -Xss1024k -XX:NewSize=768m
-XX:+UseParallelGC -XX:MaxGCPauseMillis=500"
你可以试着让它适应你的使用。
重要的是,我使用这些软件:
- Tomcat 9
- OpenJDK-11
- GeoServer 2.16.x
- Debian GNU/Linux 10(buster(
有关查阅JVM openJDK-11配置选项的文档:https://manpages.debian.org/testing/openjdk-11-jre-headless/java.1.en.html