Как изменить приятность процесса по имени

Процесс Java убивает мой компьютер (Intel i3, 8GB RAM). Он занимает весь процессор, и система начинает зависать. Я пытался изменить niceness Ява-процессов, но я должен контролировать его все время, и это не всегда возможно. Поэтому для начала я попытался построить команду, чтобы изменить процесс niceness по имени. Закончилось примерно так:

ps ax -o pid,comm | grep java | awk '{print $1}' | tr "\n" " " | renice -n 5 -p

Но похоже, что это не работает. И я не знаю, куда идти дальше. Bash скрипт может быть? Запустить его cron или watch каждый x время? Или есть лучший способ?

4 ответа

Решение

Если у вас есть только один java экземпляр работает, просто:

renice -n 5 -p $(pgrep ^java$)
  • $(pgrep ^java$): подстановка команд; bash заменяет это выводом pgrep ^java$; pgrep ^java$ возвращает список PID процессов, имя которых соответствует регулярному выражению ^java$, который соответствует всем процессам, чье имя точно java

Если у вас есть несколько java запущенные экземпляры:

for p in $(pgrep ^java$); do renice -n 5 -p $p; done
  • for p in $(pgrep ^java$); do renice -n 5 -p $p; done: почти так же, как указано выше; $(pgrep ^java$) является подстановкой команды; bash заменяет это выводом pgrep ^java$; pgrep ^java$ возвращает список PID процессов, имя которых соответствует регулярному выражению ^java$, который соответствует всем процессам, чье имя точно java; это расширено в for цикл, который назначает новую строку вывода pgrep ^java$ к переменной $p и работает renice -n 5 -p $p на каждой итерации до выхода pgrep ^java$ потребляется

Попробуй это:

pgrep java | xargs -n 1 echo renice -n 5 -p

Если вывод в порядке, удалите echo,

После всего, что произошло, была проблема с памятью. Я не установил максимальный объем памяти для Jetty, поэтому он попытался выделить 1/4 всей памяти. Также я нашел окончательное решение для таких проблем здесь:

OOM убийца не работает?

Самый простой способ, который я нашел, это использование pidof команда:

renice <new niceness> -p $(pidof <process name>)

находится по адресу: http://www.commandlinefu.com/commands/view/4614/renice-by-name

Для вашей ситуации, вероятно, поместите эту команду в crontab -e (как корень) с любым периодом, который вы хотите (скажем, каждые 30 минут). Похоже, вы должны найти основную причину ваших новых процессов Java и процессов, требующих больших ресурсов, и посмотреть, сможете ли вы это исправить / предотвратить.

Другие вопросы по тегам