我有一台运行ubuntu服务器12.04lts的戴尔pd2950(2x4core)服务器。还有一个VLC编码器实例正在运行。最近我更新了vlc的脚本(vlm)以提高质量,这意味着我也在提高cpu利用率。因此,我开始调整脚本以避免超过最大利用率。我使用top来监视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
1米的平均负荷经常达到14-15。所以我想知道我的系统怎么了?有人有过这个问题吗?
更多信息:
我正在使用带有x264编解码器的vlc来编码实时http流(应用程序/八位字节流)。它使用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
最佳答案
您的系统似乎没有任何问题。问题似乎在于你对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时间。
关于linux - Linux(Ubuntu)的平均负载高于完全真实利用率吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23566758/