在 *nix 中,是啥导致 top 命令中的“睡眠”?
Posted
技术标签:
【中文标题】在 *nix 中,是啥导致 top 命令中的“睡眠”?【英文标题】:In *nix, what causes "sleeping" in top command?在 *nix 中,是什么导致 top 命令中的“睡眠”? 【发布时间】:2011-04-20 17:03:37 【问题描述】:是什么导致了我在top
中看到的这些sleeping
进程?如果我要调用 php 的 sleep()
函数,那会增加我在 top
中看到的 sleeping
计数吗? sleeping
中的数字高有什么缺点吗?
【问题讨论】:
进程正在休眠,因为它们目前无事可做。 【参考方案1】:一个进程在被阻塞时处于休眠状态,等待某事。例如,它可能调用了read()
并正在等待来自网络流的数据。
sleep()
确实是让您的进程休眠一段时间的一种方法。然而,睡眠是除计算密集型进程之外的所有进程的正常状态——睡眠本质上是一个进程在不做任何其他事情时所做的事情。大多数进程处于休眠状态是正常的事态 - 如果不是,这往往表明您需要更多的 CPU 马力。
【讨论】:
【参考方案2】:休眠进程就像挂起的进程。 进程在以下情况下休眠:
-
它正在执行 I/O 操作(I/O 阻塞)
当您通过 sleep() 命令它进入睡眠状态时
任何进程的状态都可以是:
就绪:当它准备好执行并在队列中等待具有特定优先级的处理器调用时 睡眠:当它正在运行并且它被阻塞以进行 I/O 操作或执行 sleep() 时 正在运行:当处理器执行一个进程时,它就处于运行状态。状态含义
R 可运行
T 已停止
P 正在等待页面输入
D 等待 I/O
S 睡眠
我空闲 - 睡眠 >20 秒
Z 僵尸或已解散
【讨论】:
【参考方案3】:它们是当前未在 CPU 上运行的进程。这不一定是坏事。
如果您有大量(例如,在服务器系统上为 10,000 个)处于休眠状态的进程,则用于跟踪它们的内存量等可能会降低系统对非休眠进程的效率。
要不然没关系。
大多数普通服务器系统大部分时间都有 100 到 1000 个;这没什么大不了的。
仅仅因为他们现在没有做任何事情并不意味着他们不会很快。将它们保存在内存中准备就绪,可以在需要时减少延迟。
【讨论】:
【参考方案4】:在这里更详细一点,S
状态表示进程正在等待计时器或慢速设备,而D
状态表示它正在等待快速设备。
什么是快速设备和慢速设备并没有很好的定义,但一般来说,所有串行、网络和终端设备都是慢速设备,而磁盘是快速设备。
【讨论】:
以上是关于在 *nix 中,是啥导致 top 命令中的“睡眠”?的主要内容,如果未能解决你的问题,请参考以下文章