# 性能瓶颈分析

URL: https://caijiao.org/docker/troubleshooting/perf
Source: docs/docker/troubleshooting/perf.md
Description: 本章节介绍 Docker 容器性能瓶颈分析方法，包括 CPU、内存、I/O、网络等指标的监控与排查技巧，并提供优化方案，帮助提升容器化应用的运行效率和稳定性。

在生产环境中，Docker 容器可能出现性能瓶颈，本节讲解如何分析和优化容器性能，确保应用高效运行。

## 1. 常见性能瓶颈类型

- **CPU 限制**：容器占用过高或 CPU 配额不足
- **内存压力**：容器内存不足或泄漏
- **磁盘 I/O 瓶颈**：卷挂载或日志频繁写入
- **网络延迟**：容器间通信或外部访问慢
- **镜像与依赖问题**：过大镜像或不必要服务占用资源

## 2. 容器资源监控工具

- **Docker CLI**

```bash
docker stats
````

- 查看容器 CPU、内存、网络和 I/O 使用情况

- **cAdvisor**

  - 实时监控容器性能指标，支持 Prometheus 集成

```bash
docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  gcr.io/cadvisor/cadvisor:latest
```

- **Prometheus + Grafana**

  - 收集、存储和可视化性能指标
  - 设置告警阈值

## 3. 性能瓶颈排查方法

1. **CPU**：

   - 查看 `docker stats` CPU 使用率
   - 使用 `top` 或 `htop` 查看容器进程占用
   - 优化多线程任务或限制 CPU 配额

```bash
docker run --cpus="1.5" myapp
```

2. **内存**：

   - 查看内存使用情况和 OOM 事件
   - 限制内存，避免容器占用宿主机过多

```bash
docker run --memory="512m" myapp
```

3. **I/O**：

   - 检查卷挂载和日志文件频繁写入
   - 优化写入频率，使用 tmpfs 或日志收集工具

4. **网络**：

   - 检查容器网络配置
   - 使用 `docker network inspect` 排查网络瓶颈
   - 考虑使用自定义桥接网络优化通信

## 4. 优化建议

- 使用轻量化镜像，减少启动时间
- 多阶段构建，剔除不必要依赖
- 合理配置 CPU、内存和卷
- 日志集中管理，减少 I/O 压力
- 对关键服务设置监控和告警

---

通过系统分析容器 CPU、内存、I/O 和网络指标，可以快速定位性能瓶颈，并采取优化措施，提升 Docker 容器化应用的运行效率和可靠性。
