Нормально ли значение PID превышает 65535?
У меня есть управляемый VPS, работающий по стандарту CloudLinux 6.6 x86_64.
У него есть несколько сайтов с MySQL, PHP и Apache, работающими с CPanel.
Я работаю над системой PHP, которая должна управлять PID и определять его состояние.
Я определил smallint
поле (2 байта) в моей базе данных MySQL для хранения PID.
Но сегодня я заметил нечто странное:
Служба "капризничала" и говорила, что процесс не запущен, когда задача фактически завершена.
Я посмотрел его, и там были процессы с PID до 997282 (самый высокий на данный момент).
Я пытался просмотреть это в Google, и ничего, что мне не помогает.
Я нашел только информацию о файле /proc/sys/kernel/pid_max
который я использовал, чтобы прочитать его и получить максимальный PID оттуда, который 1048576
,
Нормально ли иметь PID более 65535?
Вид несвязанного: сервер кричит о перезагрузке, когда значение PID превышает 10000?
Любую дополнительную информацию, которая может вам понадобиться, я готов предоставить в определенный момент, когда секрет не раскрывается.
2 ответа
ПИДы перерабатываются. Когда процесс завершает работу, его PID может позже использоваться другим процессом, так что вы не "исчерпываете" или не нуждаетесь в перезагрузке просто потому, что PID близок к максимальному значению, но смотрите ниже...
Я не изменяю этот параметр sysctl, если в этом нет необходимости; например, работа в загруженной системе с множеством кратковременных процессов или сильно многопоточное приложение с долго работающими процессами.
Обычно я устанавливаю 99999 или, в некоторых случаях, 999999...
В одном известном случае у меня был сервер базы данных, на котором заканчивались идентификаторы процессов. PID были исчерпаны в среднем 9 000–10 000 одновременных подключений к базе данных. Каждый порождал несколько потоков, достигая предела в 32 768, настроенного в ОС. Это подняло среднюю загрузку системы из-за высокой очереди выполнения.
Повышение максимального значения PID уменьшило давление.
Редактировать:
Если это VPS, я думаю, что у хоста будет высокое значение pid_max, потому что PID совместно используются гостями в системе. Это, вероятно, для обеспечения запаса.
Теоретический максимальный номер pid для 32-битных систем составляет 32768, а для 64-битных систем - 4194304. Вы можете определить другой предел, который находится ниже этих цифр в файле, который вы упомянули в своем вопросе (/proc/sys/kernel/pid_max
).
Если pid_max
Достигнута (запустив процессы) система не позволяет создавать новые процессы до тех пор, пока существующие не выйдут и не будут очищены. Таким образом, у вас нет проблем, если в вашей системе не запущено 1048576 процессов.