当前位置: 首页 > news >正文

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

本文由Markdown语法编辑器编辑完成。

1.背景:

近期在处理现场问题,观察服务器时,会遇到某些进程占用较高内存的情况。由于我们的服务,基本上都是以容器的方式在运行,因此就需要找到,到底是哪个容器,占用的内存比较高。

以下是根据htop,查看到的,占内存较高的进程的信息。
在htop中,第一列是进程的id,通过进程id, 一般就可以看到进程的启动方式。进而,希望能够通过进程id, 找到是哪个启动的容器,占用内存较高,从而想办法来调整其内存占用,改善服务器的性能。

2. 具体操作:

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

在这里插入图片描述

第一列显示的PID: 1249316, 就是目前占用内存最高的进程id.

那么怎么通过这个进程id, 来查找到是哪一个docker服务呢.
可以采用:

cat /proc/1249316/cgroup

这样就会输出docker的id. 比如这里就会输出:

0::/docker/19a3a51e7753133ff504b68ecffee477bdf40fe95f0865c5b922b173a6a0a7bd

然后,我们可以利用docker/后面的这一列数字.取前面的12以内的数字,再grep docker.

docker ps -a |grep -i 19a3a51e77

在这里插入图片描述

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

通过向AI提问后,可以通过shell脚本的方式,计算出当前服务器上面所有的容器的内存占用,并且按照内存占用的大小,排序后输出.具体指令是:

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的百分比,内存占用百分比等参数.
从而就可以来分析,到底是什么原因,占用较高的内存,是否符合预期等.

http://www.dtcms.com/a/14222.html

相关文章:

  • 机试题——移动01字符串
  • Ubuntu20.04上搭建nginx正向代理提供上网服务
  • 【Elasticsearch】keyword分析器
  • 用vue3写一个好看的wiki前端页面
  • 如何在24GB的GPU上运行DeepSeek-R1-Distill-Qwen-32B
  • Django REST Framework:如何获取序列化后的ID
  • Unity中自定义协程的简单实现
  • linux 查看设备中的摄像头迅速验证设备号
  • 畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用
  • 一文讲清前端热更新
  • npm 私服使用介绍
  • docker搭建redis-cluster
  • DeepSeek、Kimi、文心一言、通义千问:AI 大语言模型的对比分析
  • 多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理
  • Linux系统离线部署MySQL详细教程(带每步骤图文教程)
  • 网络工程师 (29)CSMA/CD协议
  • kron积计算mask类别矩阵
  • python连点器
  • 【STM32】舵机SG90
  • 部署 DeepSeek R1各个版本所需硬件配置清单
  • 网络分析工具—WireShark的安装及使用
  • 【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)
  • 【学习笔记】for、forEach会不会被await阻塞
  • 【2024~2025年备受关注的AI大模型】
  • 杂记:STM32 调试信息打印实现方式
  • 关于 IoT DC3 中驱动(Driver)的理解
  • SolidWorks C# How
  • go语言获取机器的进程和进程运行参数 获取当前进程的jmx端口 go调用/jstat获取当前Java进程gc情况
  • 【前端】几种常见的跨域解决方案代理的概念
  • SQLMesh系列教程-2:SQLMesh入门项目实战(上篇)