簡體   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