使用docker stats
,您可以看到容器的内存使用情况。
有没有办法在运行docker stats
时找到最高内存使用量?
答案 0 :(得分:1)
我从here获取了一个采样脚本,并通过@pl_rock汇总了数据。但要小心 - #!/bin/bash
"$@" & # Run the given command line in the background.
pid=$!
echo "" > stats
while true; do
sleep 1
sample="$(ps -o rss= $pid 2> /dev/null)" || break
docker stats --no-stream --format "{{.MemUsage}} {{.Name}} {{.Container}}" | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' >> stats
done
for containerid in `awk '/.+/ { print $7 }' stats | sort | uniq`
do
grep "$containerid" stats | sort -r -k3 | tail -n 1
done
命令只比较字符串值 - 所以结果通常是错误的(但对我来说还可以)。
还要注意,docker有时会报告错误的数字(即,比物理RAM更多分配的mem)。
这是脚本:
{{1}}
答案 1 :(得分:1)
如果您需要查找峰值使用情况,最好请求{'cat': [['stray', 'brown', 'big'],
['house', 'white', 'small']]}
选项并根据总内存计算(除非您限制容器可用的内存)。 .MemPerc
具有在容器生命期间发生变化的单位,这会影响结果。
.MemUsage
您可以将正在进行的日志流式传输到文件(或脚本)。
要获得最初请求的最大内存:
docker stats --format 'CPU: {{.CPUPerc}}\tMEM: {{.MemPerc}}'
然后您可以询问系统的总RAM(再次假设您没有限制Docker可用的RAM)并计算:
(timeout 120 docker stats --format '{{.MemPerc}}' <CONTAINER_ID> \
| sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' ; echo) \
| tr -d '%' | sort -k1,1n | tail -n 1
如上所述,您需要知道在使用超时时容器将运行多长时间,但如果在脚本提交的后台运行awk '/MemTotal/ {print $2}' /proc/meminfo
而没有这个,则可以在容器完成后将其终止。
...
此命令允许您生成cpu / memory load的时间序列:
docker stats
请注意,它管道进入gzip。在这种形式下,每秒可以获得~2行,因此如果不这样,文件会很快变大。
我建议将其用于基准测试和故障排除,而不是用于生产容器
答案 2 :(得分:0)
你可以使用命令:
docker stats --no-stream | awk '{ print $3 }' | sed '1d'|sort | tail -1
它将通过容器提供最高内存。
让我解释一下命令:
--no-stream : Disable streaming stats and only pull the first result
awk '{ print $3 }' : will print MEM USAGE
sed '1d' : will delete first entry that is %
sort : it will sort the result
tail -1 : it will give last entry that is highest.
答案 3 :(得分:0)
就我而言,我想监视一个为我的Web应用程序运行测试的Docker容器。该测试套件相当大,它们在实际的浏览器中包含javascript测试,并且会消耗大量的内存和时间。
理想情况下,我想实时查看当前的内存使用情况,但也要保留历史记录以便以后进行分析。
我最终得到了Keiran's solution的修改和简化版本:
CONTAINER=$(docker ps -q -f name=CONTAINER_NAME)
FORMAT='{{.MemPerc}}\t{{.MemUsage}}\t{{.Name}}'
docker stats --format $FORMAT $CONTAINER | sed -u 's/\x1b\[[0-9;]*[a-zA-Z]//g' | tee stats
注意:
CONTAINER=$(docker ps -q -f name=NAME) #
按名称查找容器,但是有other options FORMAT='{{.MemPerc}} ...}} #
MemPerc首先(进行排序);否则您可以creative sed -u #
-u
标志很重要,它会关闭缓冲| sed -u 's/\x1b\[[0-9;]*[a-zA-Z]//g' #
删除ANSI转义序列| tee stats #
不仅显示实时信息,而且还可以写入统计文件sort -n stats | tail