Docker查看应用的实际内存

文章来源:一氧化碳中毒   发布时间:2021-5-29 20:36:43   点击数:
  北京能治疗白癜风的医院 http://m.39.net/pf/bdfyy/
前言

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

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

dockerstats--no-stream

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

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

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

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

注:这里的docker版本是Dockerversion20.10.2,buildf61

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

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

处理方案

其实可以分成两个步骤

找到应用的真实进程Id(宿主机里面的)从宿主机的/proc/pid/status去看VmRSS的值找Pid

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

dockerinspect-f{{.State.Pid}}容器ID

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

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

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

查VmRSS

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

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

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

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

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

#找出所有运行的容器idNames=`dockerps--format"{{.ID}}

{{.Names}},"`#按,号分隔OLD_IFS="IFS"IFS=","arr=(idNames)IFS="OLD_IFS"#输出Titleprintf"%-15s%-30s%-15s\n"IdNameMem#遍历所有容器foritemin{arr[

]}do#容器ID和容器名字按

分隔OLD_IFS="IFS"IFS="

"array=(item)IFS="OLD_IFS"#当前容器的Pidpid=`dockerinspect-f{{.State.Pid}}{array[0]}`#当前容器的内存mem=(cat/proc/pid/status

grep-eVmRSS

awk{print2})#输出结果printf"%-15s%-30s%-15s\n"{array[0]}{array[1]}[mem/]Mdone执行上面的脚本后,就可以看到当前正在运行的容器的内存占用情况了。

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

预览时标签不可点收录于话题#个上一篇下一篇
转载请注明:http://www.lwblm.com/bytj/11963.html