В *nix, что вызывает "спящий" режим в верхней команде?
Что вызывает эти sleeping
процессы, которые я вижу в top
? Если бы я назвал PHP sleep()
функция, это добавит к sleeping
рассчитывать я вижу в top
? Есть ли недостатки в том, чтобы иметь большое количество в sleeping
?
4 ответа
Процесс спит, когда он заблокирован, чего-то ждет. Например, это могло бы вызвать read()
и ожидает поступления данных из сетевого потока.
sleep()
это действительно один из способов, чтобы ваш процесс поспал некоторое время. Спящий режим, однако, является нормальным состоянием всех процессов, кроме сильно связанных с вычислениями. Спящий режим - это, по сути, процесс, который не выполняет ничего другого. Это нормальное состояние для большинства ваших процессов в спящем режиме - если это не так, это, как правило, указывает на то, что вам требуется больше мощности процессора.
Спящий процесс подобен приостановленному процессу. Процесс спит, когда:
- Это делает операцию ввода / вывода (блокировка для ввода / вывода)
- Когда вы приказываете спать по сну ()
Статус любого процесса может быть:
- Готов: когда он готов к выполнению и находится в очереди, ожидая вызова процессора с определенным приоритетом
- Спящий режим: когда он был запущен и был заблокирован для операции ввода-вывода или при выполнении режима сна ()
- Выполнение: когда процессор выполняет процесс, он становится запущенным.
Статус Значение
R Runnable
Т остановлен
P Ожидание на Pagein
D Ожидание ввода / вывода
S спать < 20 секунд
Я бездействую - сплю>20 секунд
Z Zombie или несуществующий
Чтобы вдаваться в подробности здесь, S
состояние означает, что процесс ожидает на таймере или медленном устройстве, в то время как D
состояние означает, что оно ожидает на быстром устройстве.
То, что представляет собой быстрое устройство по сравнению с медленным устройством, не очень хорошо определено, но, как правило, все последовательные, сетевые и терминальные устройства являются медленными устройствами, а диски - быстрыми устройствами.
Это процессы, которые сейчас не работают на процессоре. Это не обязательно плохо.
Если у вас огромное количество (например, 10000 в серверной системе) процессов, находящихся в спящем режиме, объем памяти и т. Д., Используемый для их отслеживания, может сделать систему менее эффективной для процессов, которые не спят.
В противном случае это нормально.
В большинстве обычных серверных систем большую часть времени проводят от 100 до 1000; это не имеет большого значения.
То, что они сейчас ничего не делают, не означает, что они не будут, очень скоро. Хранение их в памяти, готово, уменьшает задержки, когда они необходимы.