Что происходит при достижении pid_max
Как следует из названия, что происходит, когда pid_max
(32-битный стандарт это 32768) достигается многими зомби-процессами?
На нашем сервере пользователь генерирует много suphp defunct zombie
процессы, и это заставляет наш сервер перезагружаться... и я думаю, что это происходит потому, что pid_max
достигнуто...
Я использую CentOS 5.8 с Apache 2.2.3
Благодарю. С наилучшими пожеланиями, Джон.
РЕДАКТИРОВАТЬ Спасибо за ответы.
3 ответа
PID генерируются последовательно, и перед назначением процессу выполняется проверка, чтобы убедиться, что у процесса в настоящее время нет определенного PID. Когда достигается pid_max, счетчик просто возвращается в начало. Если больше нет доступных PID, то больше нельзя создавать процедуры, и вы получите сообщение об ошибке "... Нет процессов".
Если нет доступных PID, то новые процессы не могут быть созданы. Некоторые операционные системы резервируют несколько PID для пользователя root.
ПИДы используются повторно. Так что, если есть доступный PID, он будет использоваться.
Интерфейс программирования Linux охватывает это, и я просто процитирую его здесь, потому что он немного более конкретен, чем принятый ответ. Со страницы 115.
В 32-битной системе максимальный PID равен 32767. Каждый раз, когда достигается предел, ядро сбрасывает счетчик идентификаторов процессов, чтобы идентификаторы процессов назначались, начиная с младших целочисленных значений.
И оно будет сброшено до 300, а не до 1. Это сделано потому, что многие идентификаторы процессов с низкими номерами постоянно используются системными процессами и демонами, и, таким образом, время будет потрачено впустую на поиск неиспользуемого идентификатора процесса в этом диапазоне.
Я не уверен, что значение сброса по умолчанию по-прежнему равно 300 в 64-битных системах, может быть, в 64-битном ядре просто увеличивается количество системных процессов?