【docker知识】快速找出服务器中占用内存较高的容器

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3008

本文由Markdown语法编辑器编辑完成。
1.背景:

近期在处理现场题目,观察服务器时,会遇到某些进程占用较高内存的情况。由于我们的服务,基本上都是以容器的方式在运行,因此就需要找到,到底是哪个容器,占用的内存比力高。
以下是根据htop,查看到的,占内存较高的进程的信息。
在htop中,第一列是进程的id,通过进程id, 一样平常就可以看到进程的启动方式。进而,希望能够通过进程id, 找到是哪个启动的容器,占用内存较高,从而想办法来调解其内存占用,改善服务器的性能。
2. 具体操纵:

2.1 htop按内存排序,查找内存占用较高的进程id


第一列显示的PID: 1249316, 就是目前占用内存最高的进程id.
那么怎么通过这个进程id, 来查找到是哪一个docker服务呢.
可以采取:
  1. cat /proc/1249316/cgroup
复制代码
这样就会输出docker的id. 比如这里就会输出:
  1. 0::/docker/19a3a51e7753133ff504b68ecffee477bdf40fe95f0865c5b922b173a6a0a7bd
复制代码
然后,我们可以使用docker/反面的这一列数字.取前面的12以内的数字,再grep docker.
  1. docker ps -a |grep -i 19a3a51e77
复制代码

2.2 通过将所有的容器,按占用内存巨细排序后输出

通过向AI提问后,可以通过shell脚本的方式,计算出当前服务器上面所有的容器的内存占用,而且按照内存占用的巨细,排序后输出.具体指令是:
  1. docker stats --no-stream --format "{{.MemUsage}}" | awk '{split($1, a, "MiB"); if (a[2] == "") {split($1, a, "GiB"); sum += a[1] * 1024} else {sum += a[1]}} END {print sum " MiB"}'
复制代码

脚本运行完成后,我们便可以看到,根据内存占用巨细排序后的容器的名称,id, 当前占用CPU的百分比,内存占用百分比等参数.
从而就可以来分析,到底是什么缘故原由,占用较高的内存,是否符合预期等.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表