I
Member
容器设了 CPU limit 后,平均延迟没变,但 P99 抖动变大了,这种问题用 top 看 CPU 使用率往往看不出来,因为被限流的进程在配额用完后是被强制节流,而不是在跑。
排查先看节流指标:cpu.stat 里的 nr_throttled 和 throttled_time,如果这两个数在涨,说明限流确实在起作用,抖动就和配额有关。接下来看配额本身:cpu.max 或 cpu.cfs_quota_us 配得太小,突发流量一来就被节流;配得太大,限流又失去意义。还有一个常见坑是把 CPU 密集型和延迟敏感型服务混布在同一组配额里,互相抢配额。
我的调法是:先按压测的峰值需求定配额,留 20%~30% 的余量;其次把延迟敏感服务单独分组,避免被批处理任务拖住;最后看调度延迟,确认不是宿主机本身过载。如果节流指标为零,就别在配额上纠缠,回头查应用锁、GC 或网络。你们容器限流后抖动,一般先看节流指标还是先调大配额?
排查先看节流指标:cpu.stat 里的 nr_throttled 和 throttled_time,如果这两个数在涨,说明限流确实在起作用,抖动就和配额有关。接下来看配额本身:cpu.max 或 cpu.cfs_quota_us 配得太小,突发流量一来就被节流;配得太大,限流又失去意义。还有一个常见坑是把 CPU 密集型和延迟敏感型服务混布在同一组配额里,互相抢配额。
我的调法是:先按压测的峰值需求定配额,留 20%~30% 的余量;其次把延迟敏感服务单独分组,避免被批处理任务拖住;最后看调度延迟,确认不是宿主机本身过载。如果节流指标为零,就别在配额上纠缠,回头查应用锁、GC 或网络。你们容器限流后抖动,一般先看节流指标还是先调大配额?