繁体   English   中英

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

[英]Execute KILL command from JAVA_OPTS using -XX:OnOutOfMemoryError

我正在尝试对 SpringBoot 应用程序在 OnOutOfMemoryError 上执行 kill 命令。 下面是具有命令的 .conf 文件。

JAVA_OPTS="-Xmx512M -XX:OnOutOfMemoryError=\"kill $(lsof -t -i:8080)\""

如果我使用 Java Hostspot VM 命令将 Spring 启动应用程序作为“java -jar”运行它可以正常工作,但是当作为 Linux systemd 服务运行时,应用程序不会被杀死。

Exception  : "Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space"

在我的场景中,我使用 tomcat 和 docker swarm 中的容器运行一个 GeoServer 实例。

我希望 swarm 在此实例出现任何问题后重新创建容器,但在 OutOfMemory 错误后,容器将永远不会重新启动,因为 JVM 仍在运行,尽管应用程序不再响应。 对于这种情况,我使用 OnOutOfMemoryError 并且在这种类型的错误后消除容器,以便 swarm 可以重新创建它。

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"

您可以尝试使其适应您的使用。

重要的是,我使用这些软件:

  • 雄猫9
  • OpenJDK-11
  • 地理服务器 2.16.x
  • Debian GNU/Linux 10(破坏者)

参考 JVM openJDK-11 配置选项的文档: https ://manpages.debian.org/testing/openjdk-11-jre-headless/java.1.en.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM