Как изменить приятность процесса по имени
Процесс 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 и процессов, требующих больших ресурсов, и посмотреть, сможете ли вы это исправить / предотвратить.