Linux(Ubuntu)的平均负载高于总真实利用率?

时间:2014-05-09 14:09:43

标签: linux cpu-usage vlc

我有一台运行Ubuntu服务器12.04LTS的dell pd2950(2x4core)服务器。并且有一个VLC编码器实例正在运行。最近我更新了VLC的脚本(VLM)以提高质量,这意味着我也在增加CPU利用率。所以我开始调整脚本以避免超出最大利用率。我使用顶部来监控CPU利用率。我发现负载平均值高于100%(我总共有8个核心,所以8.00是100%)但仍然有20-35%是空闲的,如:

top - 21:41:19 up 2 days, 17:15,  1 user,  load average: 9.20, 9.65, 8.80
Tasks: 148 total,   1 running, 147 sleeping,   0 stopped,   0 zombie
Cpu(s): 32.8%us,  0.7%sy, 29.7%ni, 36.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1982680k total,  1735672k used,   247008k free,   126284k buffers
Swap:        0k total,        0k used,        0k free,   774228k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9715 wilson    RT   0 2572m 649m  13m S  499 33.5  13914:44 vlc
11663 wilson    20   0 17344 1328  964 R    2  0.1   0:02.00 top
    1 root      20   0 24332 2264 1332 S    0  0.1   0:01.06 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.09 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:27.05 ksoftirqd/0
    4 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/0:0
    5 root       0 -20     0    0    0 S    0  0.0   0:00.00 kworker/0:0H

为了确认我的CPU没有超线程,我试过:

wilson@server:/$ nproc
8

为了减少因刷新时间引起的采样偏差,我也尝试过:

wilson@server:/$ top -d 0.1

我长时间查看%id 这个数字,它一直没有低于14。

我也尝试过:

wilson@server:/$ uptime
21:57:20 up 2 days, 17:31,  1 user,  load average: 9.03, 9.12, 9.35

1m负载平均值通常达到14-15。所以我想知道我的系统出了什么问题?有没有人遇到这个问题?

更多信息:

我正在使用带有x264编解码器的VLC来编码实时HTTP流(application / octet-stream)。它使用ffmpeg(libavc)解码并输出为Apple HLS(.ts段)。我在为x264添加参数后发现了这个问题:

level=41,ref=5,b-adapt=2,direct=auto,me=umh,subq=8,rc-lookahead=60,analyse=all

这几乎等于预设=慢。正如您所看到的,我的VLC实时运行。参数是:

wilson@server:/$ chrt -p -f 99 vlc-wrapper

2 个答案:

答案 0 :(得分:1)

您的系统似乎没有任何问题。什么是错误似乎是您对CPU会计的理解。特别是,平均负载与CPU使用几乎没有任何关系。负载平均值基于准备运行的进程数(不等待I / O,网络,键盘输入等...),如果有可用的CPU来安排它们。虽然确实如此,给定一个8核心系统,如果所有8个核心都是100%忙碌并且每个都有一个CPU绑定线程,那么你的平均负载应该是8.00左右,它完全是平均负载可能为200.0,CPU利用率接近0%。所有这一切都表明你已经准备好运行了200个进程,但是一旦它们被安排好,它们在返回等待某种输入之前几乎什么也没做。

您的top输出显示vlc似乎使用了大约相当于5个内核的内容,但它并不表示您是否拥有5个内核,每个内核100%,或者所有8个核心各占62.5%。 top列出的所有其他进程也会影响您的平均负载以及CPU使用率。特别是,top像0.1秒的示例一样以短暂的延迟运行,可能会使您的平均负载几乎增加1,即使整体而言,它并没有占用大量的CPU时间。 / p>

答案 1 :(得分:0)

阅读本文:

Understanding load average vs. cpu usage

  

如果负载平均值为7,有4个超线程处理器,那不应该意味着CPU正在工作到大约7/8容量吗?

     

不,这只是意味着您在作业队列中平均 7个正在运行的进程

但我认为我们不能使用平均负载作为参考数来确定系统是否过载。所以我想知道是否有内核级别的cpu utitlization统计工具?(为什么内核级别因为降低了性能损失)