github编辑

19.3 容器性能优化与故障诊断

容器的轻量级特性不代表性能问题会自动消失。在实际运维中,性能瓶颈可能来自 CPU 限制、内存溢出、磁盘 I/O、网络拥塞等多个层面。本节深入讨论容器性能监控、诊断方法和优化策略。

19.3.1 容器性能监控指标

核心性能指标体系

容器性能监控涉及以下关键指标:

CPU 相关指标:

  • cpu.usage_usec:容器 CPU 使用时间(微秒)

  • cpu.stat.nr_throttled:CPU 限流发生次数

  • cpu.stat.throttled_usec:CPU 限流总时间

  • cpu_percent:CPU 使用百分比

  • cpu_quota:CPU 配额设置(微秒)

内存相关指标:

  • memory.usage_bytes:当前内存使用量

  • memory.max_usage_bytes:内存使用峰值

  • memory.limit_in_bytes:内存限制

  • memory.fail_cnt:OOM(Out of Memory)失败次数

  • memory.stat.cache:页面缓存占用

  • memory.stat.rss:实际内存占用(RSS)

  • memory.stat.swap:SWAP 使用量

网络相关指标:

  • rx_bytes:接收字节数

  • tx_bytes:发送字节数

  • rx_packets:接收包数

  • tx_packets:发送包数

  • rx_errors:接收错误数

  • tx_errors:发送错误数

  • rx_dropped:接收丢包数

  • tx_dropped:发送丢包数

I/O 相关指标:

  • io_service_bytes:I/O 操作字节数

  • io_service_time:I/O 操作耗时

  • io_queued:I/O 队列长度

  • fs_limit_bytes:文件系统限制

  • fs_usage_bytes:文件系统使用量

19.3.2 使用 docker stats 实时监控

docker stats 是最基础但强大的监控工具,提供实时的容器资源使用情况。

基本使用:

在脚本中使用:

性能指标解读:

19.3.3 cAdvisor 容器监控系统

cAdvisor 是 Google 开发的容器监控工具,提供比 docker stats 更详细的性能数据。

Docker Compose 部署 cAdvisor:

启动后访问 http://localhost:8080 查看:

  • 容器性能统计

  • 系统资源使用情况

  • 历史性能数据

从 cAdvisor 提取指标:

与 Prometheus 集成:

19.3.4 Prometheus 容器监控配置

使用 Prometheus 和 node-exporter 进行长期的容器性能监控。

完整监控栈部署:

Prometheus 配置文件(prometheus.yml):

常用的 Prometheus 查询(PromQL):

19.3.5 容器 OOM 排查与内存限制调优

OOM 问题诊断

内存泄漏检测

使用专项工具分析应用内存使用:

Python 应用内存泄漏检测:

Java 应用内存分析:

内存限制最佳实践

内存超额提交(Memory Overcommit):

19.3.6 镜像体积优化与多阶段构建

镜像体积分析工具

使用 dive 分析镜像层:

使用 Dockerfile 分析工具:

多阶段构建最佳实践

Go 应用的最小化镜像构建:

Node.js 应用的多阶段构建:

Python 应用的多阶段构建:

镜像体积优化检查清单

19.3.7 常见性能问题及解决方案

问题 1: 容器频繁被 OOM 杀死

症状:容器进程被无故杀死,exit code 137 解决方案:

问题 2: CPU 被限流(CPU Throttling)

症状:应用性能突然下降,但 CPU 使用率不高 诊断:

问题 3: 网络丢包或延迟高

诊断:

最后更新于