标准答案
- CPU quota 限制可用计算时间,可能造成调度延迟和请求尾延迟;CPU shares 或权重更多表示竞争时的相对优先级。
- 内存 limit 超出后可能触发 cgroup OOM,节点仍有空闲内存也不能保证容器不被杀。
- 线程、连接和缓存数量应与 CPU、内存、下游容量和请求峰值共同计算,不能沿用宿主机默认值。
- 压测要记录 cgroup 使用、限流、OOM 事件、GC、请求延迟和吞吐,区分资源不足与应用泄漏。
题目解析
CPU limit 通常通过 quota/throttling 限制一段周期内可使用的 CPU 时间,memory limit 则是 cgroup 的硬边界,达到后可能触发 OOM。request、limit、节点容量和应用内部线程池、堆、缓存、连接池是不同层次,需要一起配置。
运行时是否正确识别 cgroup 版本和可用 CPU,会影响 JVM、Go、Python worker 等默认并发和堆设置。容量规划要看峰值而非平均值,记录 CPU throttling、memory.current、OOM events、P99 和队列等待;盲目提高 limit 可能只是把压力转移到节点或下游。
常见误区
- 误区:只看宿主机资源。改正:同时查看容器 cgroup 的 current、quota、throttling 和 OOM 事件。
- 误区:把 limit 设成平均使用量。改正:按峰值、启动峰值、缓存和恢复预算设置,并保留节点余量。
- 误区:发现限流就无限提高配额。改正:先确认 CPU 热点、线程池、请求队列和下游容量。