В Ubuntu 12.04 / Java 1.7
Я читал / искал информацию об убийце OOM и в целом понял, о чем говорится на странице руководства «proc», особенно о части oom_adj. Все началось с того, что мои важные «слушатели MQ» были убиты.
У нас есть главный процесс прослушивания, который прослушивает сообщения MQ и порождает новое задание, используя тот же файл jar, разные аргументы командной строки. Он использует Runtime.getRuntime (). Exec для запуска задания.
Все работает как пользователь с очень низкими привилегиями - пользователь, у которого нет других разрешений.
Меня беспокоит то, что оценка OOM для процесса слушателя продолжает расти, потому что он продолжает порождать процесс и в конечном итоге прекращает работу, предполагая, что вызов java exec использует fork внутри.
Как мне изменить значение oom_adj для процесса, запущенного пользователем с низкими привилегиями ? В противном случае это будет означать, что все люди, которые могут развернуть файл jar, должны иметь разрешения sudo.
Есть ли какой-либо вызов / файл, который я могу использовать, чтобы получить оценки OOM для всех заданий, чтобы выяснить, какое из них, вероятно, будет убито? Ищу отчет, похожий на то, что регистрируется в файле системного журнала, но без фактического уничтожения заданий
Использование oom_score_ajk
для решения этой проблемы - плохой способ ее решения. Даже если вы измените оценку OOM, что-то будет убито, и в конечном итоге это станет чем-то, что вы не хотите умирать (либо прослушиватель MQ, либо базовая системная служба, такая как syslog / cron).
Надежным решением вашей проблемы является увеличение объема памяти (RAM + swap) или сокращение использования памяти вашим приложением.