如何查看Linux下Docker 容器的内存使用情况
在 Linux 下部署的 Docker 容器中,查看运行中的容器的内存使用情况可以通过多种方法实现,包括使用 Docker 自身命令、docker stats
、查看容器底层的统计信息文件,以及结合系统工具(如 top
、htop
等)进行监控。
以下是详细的说明:
方式 1:使用 docker stats
查看容器的实时资源使用情况
docker stats
命令可以实时显示运行的容器的资源使用情况,包括 CPU 使用率、内存使用量、网络流量和 I/O 信息。
命令:
docker stats
运行后会列出所有容器的资源使用情况,类似于以下结果:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS abcdef12345 my-container 2.34% 52.5MiB / 512MiB 10.25% 1.03kB / 5.12kB 0B / 0B 5 1234abcd5678 another-one 10.56% 200.1MiB / 1GiB 19.56% 2.15MB / 1.78MB 8.15kB / 12.5kB 15
参数说明:
- CONTAINER ID: 容器 ID。
- NAME: 容器名称。
- CPU %: CPU 使用率,相对于系统的占比。
- MEM USAGE / LIMIT: 内存使用量与限制值。
- MEM %: 内存使用百分比。
- NET I/O: 容器的网络 I/O,包括输入和输出流量。
- BLOCK I/O: 容器的块存储 I/O(磁盘读写)。
- PIDS: 容器内运行的进程数。
查看指定容器:
如果只想查看某个容器的资源使用情况,可以指定容器名称或 ID:
docker stats <容器名称或容器ID>
方式 2:使用容器内部的统计信息文件
Docker 将容器的资源使用信息保存到主机的文件系统中,可以直接查看这些文件。
文件路径:
/var/lib/docker/containers/<容器ID>/<统计信息文件>
具体可以查看以下文件:
/var/lib/docker/containers/<容器ID>/memory.stat
: 内存统计信息。/var/lib/docker/containers/<容器ID>/cpu.stat
: CPU 使用统计。
示例:查看容器的内存信息
cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.usage_in_bytes
返回的结果是以字节为单位的内存使用量,可以通过计算转化为 MB 或 GB。
示例:查看 CPU 信息
cat /sys/fs/cgroup/cpu/docker/<容器ID>/cpuacct.usage
返回的结果是 CPU 时间(以纳秒为单位)。
方式 3:通过 top
或 htop
查看容器内进程的资源占用
容器实际上是运行于 Linux 进程之上的,通过命令工具可以直接监控进程资源使用情况。
查看所有 Docker 容器进程:
top -c
然后找到与 Docker 容器对应的进程,查看资源使用。
使用 htop
:
安装并运行 htop
,通过进程名称快速筛选 Docker 容器:
apt install htop -y # 或 yum install htop -y htop
在 htop
界面中可以按F3
搜索容器对应的进程名称或 ID,实时查看内存、CPU 使用率。
方式 4:使用 docker inspect
查看详细信息
通过 docker inspect
可以查看容器的详细信息,包括资源限制和运行时状态。
查看容器配置:
docker inspect <容器名称或容器ID>
查询内存限制:
从输出结果的 HostConfig
中查看内存的限制值:
"HostConfig": { "Memory": 536870912, # 内存限制,字节单位 "CpuShares": 512 }
方式 5:安装监控工具(如 cadvisor
或 prometheus
)
如果需要长期监控容器的资源情况,可以使用专门的 Docker 监控工具。
方法 1:使用 cAdvisor
cadvisor
是 Google 开源的容器监控工具,可以轻松监控容器资源使用。
docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 --name=cadvisor --privileged \ gcr.io/cadvisor/cadvisor:latest
然后通过浏览器访问 http://<主机IP>:8080
查看实时监控数据。
方法 2:使用 Prometheus + Grafana
Prometheus 和 Grafana 是更完善的监控套件,结合使用可以搭建图形化的监控系统:
- 部署
prometheus
和node_exporter
进行数据采集。 - 部署
grafana
创建实时图表。
具体监控指南可以根据你的需求选择合适工具。
方式 6:结合 docker-compose
查看资源使用
如果你是通过 docker-compose
部署的,可以通过 docker-compose stats
查看资源使用情况:
docker-compose stats
监控脚本化(可选)
可以使用 Bash 脚本定时监控容器内存:
#!/bin/bash for container in $(docker ps -q); do echo "容器ID: $container" docker stats --no-stream $container | grep $container done
将其保存为 monitor.sh
并运行,实时输出所有容器的资源使用情况。
总结:
docker stats
是实时查看容器资源使用的最直接命令。- 配合
docker inspect
可以检查容器的运行配置。 - 对于长期监控,建议使用
cAdvisor
或Prometheus+Grafana
搭建更高级的监控系统。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接