使用-XX:OnOutOfMemoryError从JAVA_OPTS执行KILL命令



我正在尝试对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

最新更新