凌晨的导表任务一开始跑 接口平均响应从八十毫秒涨到一秒多 负载曲线和任务执行时间完全重合。日志里能对上时间点,这种反而好排。
任务默认和业务进程同一优先级 又开了多线程跑满所有核 磁盘 IO 也抢同一块盘 单看任务没问题 放一起就把线上拖垮 双方变成互相拖累。这一点先确认清楚,后面就不用反复试。
nice -n 19 ionice -c3 /bin/bash /opt/jobs/export.sh # 限制单进程 CPU 时间 systemd-run --scope -p CPUQuota=50% /opt/jobs/export.sh
「定时任务资源争抢」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:启动时用 nice 降低 CPU 优先级 再用 ionice 把磁盘优先级也降下来;限制任务的并发线程数 不要把机器上所有核都占满;任务时间挪到业务低峰时段 前后各留出一点缓冲。
结果对不对很好判断,任务执行期间接口响应回到正常区间 任务总耗时增加在可接受范围。
