Томкэт ООМ Убить

У меня проблема с котом. Время от времени Томкэта убивает какой-нибудь...

Поэтому я протестировал его с помощью stressapptest , чтобы вызвать oom , а затем попытался перезапустить tomcat.

Я написал простой bash-скрипт, который перезапустит службу tomcat.

Это сценарий:

      #!/bin/bash
if  [ "$(systemctl is-active tomcat9)" == "failed" ] || [ "$(systemctl is-active tomcat9)" == "inactive" ]; then
        echo "Restarting tomcat!"
        systemctl restart tomcat9.service
        exit
        else
        exit
fi

И внутри setenv.sh я прописал эту опцию.

-XX:OnOutOfMemoryError='/root/restart.sh'

Вот как выглядит скрипт setenv.sh:

      #!/bin/sh
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -server -Xms1536m -Xmx1536m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:OnOutOfMemoryError='pkill java;/root/restart.sh' -XX:+DisableExplicitGC -DecadiaConsoleLogLevel=off"

Но я не знаю, почему опция "XX:OnOutOfMemoryError" не работает...

Может ли кто-нибудь помочь мне с этой проблемой?

Заранее спасибо!

1 ответ

Вы запускаете Tomcat через systemd. Это имеет два следствия:

  • Скорее всего, команда запуска Tomcat поступает из конфигурации systemd, а не из отредактированного вами сценария. Поэтому вам нужно просмотреть другие файлы, чтобы внести эффективные изменения.

  • Все, что вам нужно сказать JVM, это умереть из-за OutOfMemoryErrors. Затем скажите systemd автоматически перезапустить службу. Ваш скрипт вообще не нужен.

Другие вопросы по тегам