博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker查看应用的实际内存
阅读量:4036 次
发布时间:2019-05-24

本文共 1334 字,大约阅读时间需要 4 分钟。

前言

我们把应用部署到Docker里面之后,有什么办法查看这个应用占用了多少内存呢?

docker本身提供了一个命令让我们可以直接看到当前时间所有容易占用的情况。

docker stats --no-stream

从上面来看,这几个应用用的内存加起来已经是将近12G了。

但是,这个时候看到机器使用的内存还不到2G。

第一反应就是,docker 这个统计太离谱,太坑人了。

查了一番资料过后,其实是计算的问题,也不能说那个是错的。

注:这里的 docker 版本是 Docker version 20.10.2, build 2291f61

一般来说应用对内存的占用,这个指标其实是十分重要的,不然内存泄漏都难以发现。

如果我们想要看到应用比较真实的内存要怎么做呢?

处理方案

其实可以分成两个步骤

  1. 找到应用的真实进程Id(宿主机里面的)

  2. 从宿主机的 /proc/pid/status 去看 VmRSS 的值

找 Pid

docker inspect 命令可以看到当前容器的一些信息,里面也包含了我们要找的这个 Pid。

docker inspect -f '{
{.State.Pid}}' 容器ID

这个时候就找到了对应的Pid了。

ps 看了一下这个Pid确实是应用的。

这个时候第一步就完成了。

查 VmRSS

有了 Pid 之后,要查内存就比较容易了。

直接 cat /proc/pid/status 就能看到了。

虽说这样能找到某个应用具体的内存,但是每次都这样去操作一遍也是挺麻烦的。

而且这样操作一次只能查一个应用,想看多个应用还要分多次。

既然有了上面的步骤,那么我们就可以把这个整理成一个脚本,每次执行一下这个脚本就可以了。

# 找出所有运行的容器idNames=`docker ps --format "{
{.ID}}|{
{.Names}},"`# 按,号分隔OLD_IFS="$IFS"IFS=","arr=($idNames)IFS="$OLD_IFS"# 输出 Titleprintf "%-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]Mdone 
执行上面的脚本后,就可以看到当前正在运行的容器的内存占用情况了。

现在看上去,占用大概是1G多,加上其他的内存占用,这个值看上去就和 free 看到的不到2G的使用内存比较接近了。

转载地址:http://giudi.baihongyu.com/

你可能感兴趣的文章
昨夜今晨最大八卦终于坐实——人类首次直接探测到了引力波
查看>>
如何优雅、机智地和新公司谈薪水?
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
第一性原理:戳中问题本质的人是怎么思考的?
查看>>
No.147 - LeetCode1108
查看>>
No.148 - LeetCode771
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mac:移动python包路径
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>