В * nix, что вызывает «спать» в верхней команде?

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

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

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

Спящий процесс похож на приостановленный процесс. Процесс засыпает, когда:

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

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

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

Состояние Значение

  • R Runnable

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

  • P Ожидание на странице

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

  • S Спящий <20 секунд

  • I Idle – спящий> 20 секунд

  • Z Зомби или несуществующий

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

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

В противном случае все в порядке.

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

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

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

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