【问题标题】:uptime VS. top CPU usage : What should I believe, why this difference?正常运行时间VS。最高 CPU 使用率:我应该相信什么,为什么会有这种差异?
【发布时间】:2011-12-13 15:03:45
【问题描述】:

我的嵌入式设备出现一些性能问题:

# uptime 
 14:59:39 up  5:37, load average: 1.60, 1.50, 1.53

对于单核系统来说非常糟糕...... :-p!但是,如果我检查一下 top 实用程序,我总是有大约 80% 的空闲时间!

Mem: 49020K used, 75960K free, 0K shrd, 0K buff, 21476K cached
CPU: 12.5% usr  4.8% sys  0.0% nic 81.7% idle  0.0% io  0.9% irq  0.0% sirq
Load average: 1.30 1.42 1.51 1/80 18696

看了一些文章,我还是相信 uptime 命令。但为什么会有这种差异?我的 CPU 真的空闲吗??!

【问题讨论】:

    标签: linux load embedded uptime


    【解决方案1】:

    负载不仅仅是衡量有多少进程处于 R 状态(可运行,可以使用 CPU 时间),还衡量处于 D 状态(不可中断睡眠,通常等待 IO)的进程。您可能有一个处于 D 状态的进程,它有助于负载,但不使用 cpu。此命令将显示所有当前对负载有贡献的进程:

    ps aux | awk '$8~/[RD]/'
    

    查看该输出,看看您是否有处于 D 状态的命令(在第 8 列中)

    【讨论】:

    • 所以如果我理解得很好,僵尸和睡眠进程被计入平均负载以及最高空闲时间?我认为“空闲”是当 CPU 执行一些“nop”时,这实际上意味着什么,但是当进程等待资源时 CPU 也可以处于空闲状态?所以我对“空闲”的理解是有缺陷的......感谢您指出这一点!
    • 不是所有的休眠进程,S状态的进程都不算,那些是“因为我无事而休眠”。但是处于 D 状态的进程“我会做一些事情,但我必须等待 IO”确实会增加负载。是的。 idle 表示“cpu 正在执行 noop” 如果进程在 IO 完成之前无法执行任何操作,则它不使用 CPU,但它正在增加负载。
    • 据我所知,Z procs 不计入 loadavg。如果您不相信,请引用源代码。
    • jørgensen 是正确的。我记错了僵尸进程,我已经更改了答案,不再提及它们。
    【解决方案2】:

    您最好了解“平均负载”的含义。

    简单来说就是多个进程,在等待某个资源,资源可能是CPU、HDD、串口……

    【讨论】:

      【解决方案3】:

      平均负载似乎有点高,这可能意味着 CPU 正忙于 I/O(磁盘/网络)或线程管理(您可能有太多的运行)。

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        相关资源
        最近更新 更多