Нормально ли значение 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 процессов.

Другие вопросы по тегам