Как изменить приятность процесса по имени
Процесс 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 всей памяти. Также я нашел окончательное решение для таких проблем здесь:
Самый простой способ, который я нашел, это использование pidof
команда:
renice <new niceness> -p $(pidof <process name>)
находится по адресу: http://www.commandlinefu.com/commands/view/4614/renice-by-name
Для вашей ситуации, вероятно, поместите эту команду в crontab -e
(как корень) с любым периодом, который вы хотите (скажем, каждые 30 минут). Похоже, вы должны найти основную причину ваших новых процессов Java и процессов, требующих больших ресурсов, и посмотреть, сможете ли вы это исправить / предотвратить.