在 *nix 中,是啥导致 top 命令中的“睡眠”?

Posted

技术标签:

【中文标题】在 *nix 中,是啥导致 top 命令中的“睡眠”?【英文标题】:In *nix, what causes "sleeping" in top command?在 *nix 中,是什么导致 top 命令中的“睡眠”? 【发布时间】:2011-04-20 17:03:37 【问题描述】:

是什么导致了我在top 中看到的这些sleeping 进程?如果我要调用 phpsleep() 函数,那会增加我在 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 命令中的“睡眠”?的主要内容,如果未能解决你的问题,请参考以下文章

*nix 是啥意思?

ps top 命令

linux怎样使用top命令查看系统状态

linux怎样使用top命令查看系统状态

笔记本睡眠是啥意思?有啥用?

Linux里面top命令作用是啥?