报错是这么冒出来的。CentOS 7 上的转码服务原来被 CPUQuota=20% 限流过,业务量上来后单次转码从 40 秒涨到三分钟,top 里该进程 CPU 稳定卡在 20% 上不去,机器整体还有一半空闲。

原因不止一个,得分开看。drop-in 里残留 CPUQuota=20%,重启也不会消失。还有一种是同一 slice 下还有别的服务共享配额,实际可用比看到的更少。

另外,CPUShares 设得低,在争抢时被内核优先压缩。

动手时先看生效的配额

systemctl show transcode -p CPUQuotaPerSecUSec,CPUShares

随后找出配置出处

grep -rn CPUQuota /etc/systemd/system/ /usr/lib/systemd/system/transcode.service

临时放开到两核

systemctl set-property transcode CPUQuota=200%

末了确认转码耗时是否回落

journalctl -u transcode -n 30 --no-pager | grep -i elapsed

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。systemctl show 里 CPUQuotaPerSecUSec 与设定一致,top 中该进程能吃到两核,单次转码耗时回到 40 秒附近。

补一句。set-property 写的值会落到 /etc/systemd/system.control 下,和 drop-in 里旧值并存时以后者为准;限流类配置要写进版本管理,不然没人记得。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189