В 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), либо уменьшение использования памяти вашим приложением.