标准答案

  1. 按时间观察内存、RSS/PSS、fd 数量、线程、连接、CPU throttling、I/O、日志量和重启/OOM 事件。
  2. 把容器指标与请求量、错误率、P99、依赖延迟和发布时间线对齐,判断是自身增长还是外部压力。
  3. 先采取摘流、限制并发、回滚或扩容等可回滚止血动作,再保留现场分析泄漏或配置问题。
  4. 修复要加入长期指标和阈值,验证容器替换、恢复和容量边界,而不是只观察一次重启后的短暂恢复。

题目解析

“运行一段时间后”说明故障可能与累计量有关:堆或 native 内存、任务和线程、fd、连接池、日志、临时文件、队列或缓存。单次 docker stats 只能看到一个瞬间,应把资源时间序列与流量、P99、错误率、版本和下游延迟对齐。

重启可以止血,但会清除增长趋势和现场。修复前应尽量采集 cgroup events、RSS/PSS、fd、线程、连接、磁盘、日志和 heap/profile 证据,再按影响选择摘流、限并发、回滚或替换实例;恢复后要确认增长是否停止且数据没有丢失。

常见误区

  • 误区:只看一次 docker stats。改正:观察时间序列,并关联请求、发布和依赖指标。
  • 误区:看到 OOM 就只增加内存。改正:区分堆、native、缓存、队列和 cgroup 压力来源。
  • 误区:忽略日志和 fd 增长。改正:把磁盘、inode、fd、连接和线程纳入长期监控。

作者信息