Linux下监控Docker性能的核心方法与工具
docker stats是Docker内置的实时监控命令,可展示容器的CPU使用率(单核满载为100%,多核则按比例计算)、内存使用量及限制(MEM USAGE / LIMIT,接近100%需警惕OOM)、网络I/O(NET I/O,单位为KB/s或MB/s)、磁盘I/O(BLOCK I/O,单位为KB/s或MB/s)及进程数(PIDS,突增可能预示程序异常)。
docker stats(显示所有运行中容器);docker stats <容器ID或名称>;docker stats --no-stream(仅显示当前状态,不刷新);docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"(仅显示名称、CPU%、内存使用及网络I/O)。docker top可查看容器内运行的进程信息(类似主机的top命令),包括进程ID(PID)、父进程ID(PPID)、用户(USER)、命令(CMD)及资源占用(%CPU、%MEM),帮助定位容器内具体进程的性能瓶颈。
docker top <容器ID或名称>;docker top <容器ID或名称> -o pid,ppid,user,cmd,%cpu,%mem(指定显示列)。docker system df可查看Docker整体磁盘使用情况,包括镜像(Images)、容器(Containers)、数据卷(Volumes)的使用量及可回收空间(RECLAIMABLE)。结合-v参数可显示详细信息(如每个镜像/容器占用的空间)。
docker system df(概览);docker system df -v(显示每个对象的详细占用)。docker run -d --name=cadvisor -p 8080:8080 --privileged=true -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro google/cadvisor。scrape_configs配置抓取cAdvisor的指标(如job_name: 'cadvisor',targets: ['cadvisor:8080']),存储时间序列数据并支持告警规则(如内存使用率超过90%持续5分钟)。docker stats查看容器CPU%是否超过阈值(如75%持续5分钟);docker top找出容器内占用CPU高的进程(如mysqld进程占用24.3% CPU);docker exec进入容器内部使用top、htop或perf工具进一步分析。docker stats --no-stream --format '{{.Name}} {{.MemUsage}}'监控容器内存使用趋势(如某容器内存从300MiB持续增长至1.2GiB);jcmd 1 GC.heap_dump /tmp/dump.hprof),分析堆内存中的对象占用;container_memory_working_set_bytes / container_spec_memory_limit_bytes > 0.9),提前预警。docker stats查看容器NET I/O(如15.4MB/3.2MB,发送流量远大于接收);docker exec -it nginx ip addr show eth0);docker run --net container:nginx -it nicolaka/netshoot tcpdump -i eth0),查看是否有大量重传或丢包。--cpus(如--cpus=2,限制2核)、--memory(如--memory=1g,限制1GiB)参数限制资源,避免单个容器占用过多资源导致主机崩溃;docker system prune清理停止的容器、未使用的网络、悬空镜像及构建缓存,释放磁盘空间(建议每周执行一次)。