Назад | Перейти на главную страницу

Безопасно ли останавливать сервер Jboss EAP с помощью Kill -9?

У нас есть внутренние дебаты по этому поводу. Запуск jboss eap 7 на RHEL. В настоящее время у нас есть сценарий для остановки сервера, просто запустив kill -9 о процессе Java.

Мое предложение состояло в том, чтобы использовать правильную команду jboss для завершения работы:

jboss-cli --connect --commands=:shutdown

Как мы гарантируем, что jboss корректно закрыт от убийства? Я настаиваю на использовании команды jboss.

Если программное обеспечение нетривиально и поставляется с задокументированными средствами его выключения, как здесь, как представляется, используйте то, что есть. (Может быть несколько вариантов.)

Что касается SIGKILL (сигнал 9) конкретно, в этом нет ничего изящного.
Целевой процесс не может перехватить и обработать этот сигнал; он просто немедленно завершается, не успевая закончить то, что он делал, или выполнить какую-либо очистку, которую он обычно делал бы перед завершением работы.

Что касается сигналов в целом, если целью является некоторая форма плавного завершения работы, посмотрите, как программное обеспечение обрабатывает SIGTERM и / или SIGINT. Программное обеспечение, по крайней мере, имеет возможность их учитывать и корректно завершать работу.

SIGKILL следует рассматривать как крайнее средство, если корректное завершение работы службы не работает.

Просто предположить каждый пистолет заряжен и каждый приложение signal 9 unsafe. Если предположить, что в противном случае вы, скорее всего, потратите огромное количество времени на отладку случайных сбоев, вызванных такими простыми вещами, как принудительное завершение работы, которое произошло во время ротации файла журнала.

Быть signal 9 safe означает ограничение изменений состояния атомарными транзакциями, и очень немногие приложения с отслеживанием состояния действительно это делают.

В мире Java вы не сможете время от времени убивать то, что застряло. Но ваш основной метод завершения работы приложения должен быть изящным, и любой отказ от завершения работы с помощью этого метода должен подвергаться по крайней мере такой же проверке, как и любая другая ошибка в вашем программном стеке.

Согласно официальному документу RedHat, сигналы SIGHUP, SIGINT и SIGTERM запускают плавное завершение работы. SIGKILL (kill -9) - нет.