Безопасно ли отправлять SIGTERM в JVM

Хотя JVM преобразует SIGTERM и подобные сигналы в перехватчики выключения многие сценарии выключения службы используют TCP-порт для инициации выключения. (например, порт выключения Tomcat, Java Service Wrapper, интерфейсы управления JBoss и т. д.)

Поэтому я думал, что использование сигналов и перехватчиков завершения работы для корректного отключения служб Java не рекомендуется, пока не обнаружил, что Играть! framework управляет жизненным циклом службы с помощью перехватчиков завершения работы, а сценарии запуска, сгенерированные play dist, предполагают, что сигнал будет отправлен на PID JVM.

Я знаю, что сигналы зависят от платформы, а использование TCP-порта — это простой и расширяемый способ управления сервисами в кросс-платформенной манере, но я хотел бы знать, насколько это безопасно и какие риски мне нужно учитывать, когда я полагаюсь на на SIGTERM и перехватчиках выключения в качестве основного метода отключения службы.


person lyomi    schedule 14.07.2014    source источник


Ответы (1)


Пока служба Java разумно использует ShutdownHooks для упорядоченного завершения, нет проблем с отправкой SIGTERM в процесс JVM. Например. мы используем SIGTERM в качестве основного метода для инициирования завершения работы приложения в нашей большой производственной системе с высокой нагрузкой (более 5000 серверов, на которых запущено 80 различных приложений Java).

person apangin    schedule 14.07.2014