docker stats
docker stats --no-stream
[root@data1 ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b4fb48ce6a23 magical_bell 147.29% 4.207GiB / 7.638GiB 55.08% 8.72GB / 7.79GB 2.46GB / 7.21GB 71
e189b149f025 kafka 3.94% 1.549GiB / 7.638GiB 20.27% 0B / 0B 637GB / 25GB 78
14cc0c468a14 zookeeper 0.24% 178.2MiB / 7.638GiB 2.28% 0B / 0B 381GB / 7.49MB 102
统计的结果和实际有出入.
TOP
# 获取容器的PID
docker inspect -f '{{.State.Pid}}' container_name
# 根据pid查询
[root@data1 ~]# top -p 2203
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2203 1001 20 0 6470744 1.3g 6076 S 0.0 16.6 2717:49 java
VmRSS
[root@data1 ~]# cat /proc/2203/status
VmPeak: 6475388 kB
VmSize: 6470744 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 1336420 kB
VmRSS: 1329516 kB # 此处是所要查询的内存大小
脚本
# 找出所有运行的容器
idNames=`docker ps --format "{{.ID}}|{{.Names}},"`
# 按,号分隔
OLD_IFS="$IFS"
IFS=","
arr=($idNames)
IFS="$OLD_IFS"
# 输出 Title
printf "%-15s %-30s %-15s\n" Id Name Mem
# 遍历所有容器
for item in ${arr[@]}
do
# 容器ID和容器名字 按 | 分隔
OLD_IFS="$IFS"
IFS="|"
array=($item)
IFS="$OLD_IFS"
# 当前容器的Pid
pid=`docker inspect -f '{{.State.Pid}}' ${array[0]}`
# 当前容器的内存
mem=$(cat /proc/$pid/status|grep -e VmRSS| awk '{print $2}')
# 输出结果
printf "%-15s %-30s %-15s\n" ${array[0]} ${array[1]} $[$mem / 1024]M
done