LINUX.ORG.RU

jvm апка с бескончным рантаймом

 ,


0

1

Собственно, вопрос наверное вообще общий, но может есть какие-то специальные методы для конкретно жвм. Интересует как бороться с вылетом аппки по разным причинам: например, по OutOfMemoryException; ну или там даже какой сигнал системный придет, который захочет убить процесс. Коротко суть: как добиться чтобы процесс точно жил, или, как миниум, чтобы был максимально живуч.

Любой внешний ран менеджер.

какой сигнал системный придет, который захочет убить процесс.

Для тех кто игнорирует сигналы есть отдельный котёл.

Deleted
()

вылетом аппки по разным причинам: например, по OutOfMemoryException

Профайлером бороться, искать утечку, ликвидировать, по необходимости наращивать память.

ну или там даже какой сигнал системный придет, который захочет убить процесс.

И что? Допустим SIGTERM ты заигнорил бы, сразу после этого придет SIGKILL, который уже никак приложение не отработает.

как добиться чтобы процесс точно жил

watchdog какой-нибудь, или конфиг systemd в его роле.

anonymous
()

По-хорошему оно и не должно валиться. Если валится, надо выяснить причину и пофиксить.

orm-i-auga ★★★★★
()

Выпрямлять руки и не писать говнокод.

А вообще, процессы могут падать, такова правда жизни. Если тебе критична доступность конкретного сервиса, то думай о другой архитектуре. Кластеры, микросервисы, вариантов много. Есть специальное ПО и фреймворки, которые облегчают настройку всего это добра. Можешь погуглить по «high availability java».

hippi90 ★★★★★
()

в общем, все так и думал, но все равно спасибо.

yetanotherguy
() автор топика

В первом случаи нарастить рам, либо оптимизировать код. Во втором случай никак.

tyamur ★★
()

1. Задать -Xmx

2. В приложении организовать архитектуру, которая не падает от OOME. В целом это обычное исключение и никаких особенностей нет, просто надо его ловить, логгировать. Правда если есть утечка, то приложение может начать работать с черепашьей скоростью, кидая и обрабатывая OOME бесперерывно.

3. Игнорировать сигналы. Правда зачем тебе это надо - непонятно и KILL ты не проигнорируешь.

4. Использовать процесс-контролер, перезапускающий сервис при его падении. Вроде бы systemd так умеет.

Legioner ★★★★★
()

Есть специальная тулза, которая умеет хорошо запускать именно Java программы. В том числе и перезапускать по OutOfMemory и многие другие вещи - Java Service Wrapper.

До версии 2.XXX была доступна полнофункциональная и бесплатная. Потом автор поменял модель лицензирования, но и текущая бесплатная довольно много чего умеет.

Есть и ещё аналогичные, но тут гугл лучше меня поможет.

Qasta
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.