Томкэт ООМ Убить
У меня проблема с котом. Время от времени Томкэта убивает какой-нибудь...
Поэтому я протестировал его с помощью 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 автоматически перезапустить службу. Ваш скрипт вообще не нужен.