诊断 ffmpeg 高服务器负载

诊断 ffmpeg 高服务器负载

有人能帮我解释一下为什么我的服务器负载这么高,但总 CPU 使用率却低于 50% 并且有大量可用 RAM 吗?

我在 Ryzen 1700X 上运行 60 个 ffmpeg 实例。

以下是一个示例:

top - 23:06:56 up 14 days,  9:18,  1 user,  load average: 37.60, 29.48, 27.77
Tasks: 300 total,   4 running, 296 sleeping,   0 stopped,   0 zombie
%Cpu(s): 49.4 us,  2.9 sy, 24.2 ni, 22.3 id,  0.0 wa,  0.0 hi,  1.2 si,  0.0 st
KiB Mem : 65973428 total, 56648208 free,  6166708 used,  3158512 buff/cache
KiB Swap: 33521660 total, 33521660 free,        0 used. 58950204 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
26716 root      20   0 1785484 109948  15040 S  30.2  0.2   8:05.60 ffmpeg
26466 root      20   0 1785384 110252  15212 S  29.9  0.2   7:55.21 ffmpeg
23944 root      20   0 1784344  95248  14968 S  27.9  0.1  11:42.94 ffmpeg
26714 root      20   0 1786092 110624  15152 S  27.9  0.2   7:41.62 ffmpeg
22213 root      20   0 1784096 109416  15208 S  27.2  0.2  15:58.07 ffmpeg
24430 root      20   0 1785028 109392  15180 S  26.9  0.2  12:51.34 ffmpeg
23199 root      20   0 1783992  95164  15092 S  26.2  0.1  13:50.43 ffmpeg
26220 root      20   0 1785880 110148  15192 S  26.2  0.2   8:00.28 ffmpeg

以下是 mpstat -P ALL 的输出

root@Ubuntu-1604-xenial-64-minimal ~ # mpstat -P ALL
Linux 4.8.0-58-generic (Ubuntu-1604-xenial-64-minimal)  07/27/2017      _x86_64_        (16 CPU)

11:08:49 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:08:49 PM  all   35.80   16.81    2.27    0.00    0.00    1.03    0.00    0.00    0.00   44.09
11:08:49 PM    0   34.66   12.75    3.47    0.00    0.00   10.27    0.00    0.00    0.00   38.85
11:08:49 PM    1   31.05   15.86    3.41    0.00    0.00    0.96    0.00    0.00    0.00   48.72
11:08:49 PM    2   38.62   16.16    2.55    0.00    0.00    0.60    0.00    0.00    0.00   42.07
11:08:49 PM    3   33.36   17.36    2.49    0.00    0.00    0.57    0.00    0.00    0.00   46.21
11:08:49 PM    4   39.13   16.26    2.47    0.00    0.00    0.49    0.00    0.00    0.00   41.65
11:08:49 PM    5   33.42   17.36    2.47    0.00    0.00    0.56    0.00    0.00    0.00   46.19
11:08:49 PM    6   39.25   16.22    2.43    0.00    0.00    0.47    0.00    0.00    0.00   41.63
11:08:49 PM    7   33.42   17.23    2.46    0.00    0.00    0.55    0.00    0.00    0.00   46.34
11:08:49 PM    8   38.73   17.16    1.89    0.00    0.00    0.28    0.00    0.00    0.00   41.94
11:08:49 PM    9   33.78   17.71    1.77    0.00    0.00    0.26    0.00    0.00    0.00   46.48
11:08:49 PM   10   38.76   17.25    1.88    0.00    0.00    0.27    0.00    0.00    0.00   41.84
11:08:49 PM   11   33.75   17.77    1.77    0.00    0.00    0.26    0.00    0.00    0.00   46.44
11:08:49 PM   12   38.68   17.15    1.88    0.00    0.00    0.27    0.00    0.00    0.00   42.02
11:08:49 PM   13   33.73   17.70    1.76    0.00    0.00    0.26    0.00    0.00    0.00   46.55
11:08:49 PM   14   38.67   17.18    1.88    0.00    0.00    0.27    0.00    0.00    0.00   41.99
11:08:49 PM   15   33.72   17.73    1.76    0.00    0.00    0.26    0.00    0.00    0.00   46.53

我有点担心负载会达到 35+,这是一个 8 核 16 线程 CPU,但徘徊在 35 左右似乎有点高。总带宽约为 30mbps(30 个视频流被编码为 2 个较小的比特率,因此有 60 个 ffmpeg 进程),带宽约为 100mbps,服务器有一个 1gbps 端口。

有谁知道为什么在拥有大量备用资源的高规格系统上负载如此之高?

答案1

Ryzen 1700X CPU 有 16 个线程,因此最多可以同时运行 16 个进程。60 个 ffmpeg 实例最多有 44 个等待轮到它们。由于进程也等待 I/O 完成,因此其他负载平均值为 37.60 似乎没问题。

如果你想使用 top 了解特定时刻 CPU 的繁忙程度,请将除id空闲之外的百分比数字相加。你的输出:

%Cpu(s): 49.4 us,  2.9 sy, 24.2 ni, 22.3 id,  0.0 wa,  0.0 hi,  1.2 si,  0.0 st

对应的是 77.7%,而不是 50%。

相关内容