В *nix, что вызывает "спящий" режим в верхней команде?

Что вызывает эти sleeping процессы, которые я вижу в top? Если бы я назвал PHP sleep() функция, это добавит к sleeping рассчитывать я вижу в top? Есть ли недостатки в том, чтобы иметь большое количество в sleeping?

4 ответа

Решение

Процесс спит, когда он заблокирован, чего-то ждет. Например, это могло бы вызвать read() и ожидает поступления данных из сетевого потока.

sleep() это действительно один из способов, чтобы ваш процесс поспал некоторое время. Спящий режим, однако, является нормальным состоянием всех процессов, кроме сильно связанных с вычислениями. Спящий режим - это, по сути, процесс, который не выполняет ничего другого. Это нормальное состояние для большинства ваших процессов в спящем режиме - если это не так, это, как правило, указывает на то, что вам требуется больше мощности процессора.

Спящий процесс подобен приостановленному процессу. Процесс спит, когда:

  1. Это делает операцию ввода / вывода (блокировка для ввода / вывода)
  2. Когда вы приказываете спать по сну ()

Статус любого процесса может быть:

  • Готов: когда он готов к выполнению и находится в очереди, ожидая вызова процессора с определенным приоритетом
  • Спящий режим: когда он был запущен и был заблокирован для операции ввода-вывода или при выполнении режима сна ()
  • Выполнение: когда процессор выполняет процесс, он становится запущенным.

Статус Значение

  • R Runnable

  • Т остановлен

  • P Ожидание на Pagein

  • D Ожидание ввода / вывода

  • S спать < 20 секунд

  • Я бездействую - сплю>20 секунд

  • Z Zombie или несуществующий

Чтобы вдаваться в подробности здесь, S состояние означает, что процесс ожидает на таймере или медленном устройстве, в то время как D состояние означает, что оно ожидает на быстром устройстве.

То, что представляет собой быстрое устройство по сравнению с медленным устройством, не очень хорошо определено, но, как правило, все последовательные, сетевые и терминальные устройства являются медленными устройствами, а диски - быстрыми устройствами.

Это процессы, которые сейчас не работают на процессоре. Это не обязательно плохо.

Если у вас огромное количество (например, 10000 в серверной системе) процессов, находящихся в спящем режиме, объем памяти и т. Д., Используемый для их отслеживания, может сделать систему менее эффективной для процессов, которые не спят.

В противном случае это нормально.

В большинстве обычных серверных систем большую часть времени проводят от 100 до 1000; это не имеет большого значения.

То, что они сейчас ничего не делают, не означает, что они не будут, очень скоро. Хранение их в памяти, готово, уменьшает задержки, когда они необходимы.

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