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

标签 linux cpu-usage vlc

我有一台运行 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

1m平均负载往往达到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

这几乎等于 preset=slower。如您所见,我的 VLC 实时运行。参数为:

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

最佳答案

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

您的 top 输出显示 vlc 似乎使用了大致相当于您的 5 个核心,但它并不表示您是否有 100% 的 5 个核心每个,或者如果所有 8 个核心每个都为 62.5%。 top 列出的所有其他进程也会影响您的平均负载以及 CPU 使用率。特别是,top 像您的 0.1 秒示例那样以较短的延迟运行,可能会使您的平均负载本身增加近 1,尽管总体而言,它并没有使用大量 CPU 时间。

关于Linux(Ubuntu)平均负载高于总真实利用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566758/

相关文章:

jenkins - jenkins 在不运行作业的情况下 CPU 使用率高

windows - 分析 Windows 进程长期 CPU 使用率的最佳方法

android - 如何通过基于 VLC 或 RTSP 的 WiFi 从 Android 发送流媒体?

java - 在 Java 中启动 VLC 并通过 rc 接口(interface)连接到它

java - 无法在 Linux 上安装 Java

linux - 将文件内容复制到其他位置

linux - 如何搭建nginx测试环境?

python - 我如何通过守护线程收听标准输入

java - 多线程java程序阻止cpu监控自身热度

vlc - --rawvid-chroma 的可能值是什么