Назад | Перейти на главную страницу

Безопасное уменьшение PID_MAX

У меня есть один сервер в кластере, на котором произошла утечка таблицы процессов. Поскольку разработчик, ответственный за код, был недоступен в течение нескольких дней, я увеличил pid_max на машине следующим образом:

echo 4194303 > /proc/sys/kernel/pid_max

Это дало нам время, пока разработчик не смог исправить свое приложение и остановить утечку.

Однако сейчас я хотел бы вернуть этот сервер в соответствие с другими в кластере. Меня беспокоит, что есть процессы с pid в диапазоне 3 миллиона. Если я уменьшу pid_max до нормального значения, что произойдет с pid, уже находящимся в таблице? Нужно ли перезапускать систему?

Уменьшить pid_max вы должны быть уверены, что в вашей системе запущенные процессы меньше pid_max

ps -efL # L in ps list the threads, thread in linux has a pid as normal process

Я использовал это на своей рабочей станции Linux:

ps -efL | wc -l
307
sysctl -a | grep pid_max
kernel.pid_max = 32768
sysctl kernel.pid_max=2000
kernel.pid_max = 2000
sysctl -a | grep pid_max
kernel.pid_max = 2000
echo $((2000-307))
1693  ## there is pids available for new "procs|threads" ## after pid_max reduce

Ничего не случится.

я желаю Я мог бы сказать, что сервер взорвется или хотя бы загорится, но нет ...

По мере повторного использования PID они попадут в определенный диапазон. Вам действительно следует перезагрузиться и сделать новую настройку постоянной в sysctl.conf. Но помимо проблем с заполнением / полем, вероятно, нет никакого вреда в наличии большего диапазона доступных PID.