把跑批任务优先级降到最低,业务高峰时它依然吃掉大量 CPU,接口响应时间被拖慢,降优先级像是没有作用。
原因不止一个,得分开看。优先级只影响调度权重,不能硬性限制使用上限。另一种情况是任务是多线程的,单线程权重低但线程数量多。
不容易想到的是,没有放进独立的控制组做配额限制。
第一件事是确认进程优先级和线程数
ps -o pid,ni,nlwp,cmd -p 进程号
接着用服务管理器设 CPU 配额
systemctl set-property batch.service CPUQuota=50%
随后确认限制已经生效
systemctl show batch.service -p CPUQuotaPerSecUSec
压测验证实际占用
stress-ng --cpu 4 --timeout 60s
这类改动我都写进变更记录,过两周再出问题时能对上号。
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
恢复的判定其实很直接。跑批任务占用被压在设定配额内,业务高峰响应时间恢复正常。
容易忽略的是,优先级是软约束,控制组配额才是硬上限;两者可以叠加,但别指望优先级能救高峰。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。