У меня есть один сервер в кластере, на котором произошла утечка таблицы процессов. Поскольку разработчик, ответственный за код, был недоступен в течение нескольких дней, я увеличил 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.