是什么导致sleeping
了我看到的这些过程top
?如果我要调用 PHP 的sleep()
函数,那会增加sleeping
我在 中看到的计数top
吗?有高数字有什么缺点sleeping
吗?
4 回答
进程在被阻塞时处于休眠状态,等待某事。例如,它可能已经调用read()
并正在等待来自网络流的数据。
sleep()
确实是让您的进程休眠一段时间的一种方法。然而,睡眠是除计算密集型进程之外的所有进程的正常状态——睡眠本质上是一个进程在不做任何其他事情时所做的事情。大多数进程处于休眠状态是正常的事态——如果不是这种情况,则往往表明您需要更多的 CPU 马力。
休眠进程就像挂起的进程。进程在以下情况下休眠:
- 它正在执行 I/O 操作(阻塞 I/O)
- 当你通过 sleep() 命令它睡觉时
任何进程的状态可以是:
- 就绪:当它准备好执行并且它在队列中等待具有特定优先级的处理器调用时
- Sleeping:当它正在运行并且它被阻塞以进行 I/O 操作或执行 sleep() 时
- 运行:当处理器执行一个进程时,它就开始运行。
状态 含义
R 可运行
停止
P 等待寻呼
D 等待 I/O
S 睡眠 < 20 秒
我空闲 - 睡眠 >20 秒
Z Zombie 或已不复存在
它们是目前不在 CPU 上运行的进程。这不一定是坏事。
如果您有大量(例如,服务器系统上的 10,000 个)处于休眠状态的进程,则用于跟踪它们的内存量等可能会使系统对非休眠进程的效率降低。
否则,没关系。
大多数正常的服务器系统大部分时间都有 100 到 1000 个;这没什么大不了的。
仅仅因为他们现在没有做任何事情并不意味着他们不会,很快。将它们保存在内存中,准备就绪,可以在需要时减少延迟。
在这里更详细一点,S
状态意味着进程正在等待计时器或慢速设备,而D
状态意味着它正在等待快速设备。
什么是快速设备和慢速设备并没有很好的定义,但一般来说,所有串行、网络和终端设备都是慢速设备,而磁盘是快速设备。