我有一台运行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
答案 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统计工具?(为什么内核级别因为降低了性能损失)