docker容器中的内存占用高的问题分析

news2024/11/18 2:42:36

文章目录

  • 问题描述
  • 原因分析
    • 分析1
    • 分析2
    • 验证猜想
  • 结论和经验

问题描述

运维新增对某服务的监控后发现:内存不断上涨的现象。进一步确认,是因为有多个导出日志操作导致的内存上涨问题。

进一步的测试得出的结果是:容器刚启动是占用内存约为50M左右,在多次地导出日志操作后,内存能涨到2G以上。

问题:为什么日志导出会导致容器的内存不断上涨?

原因分析

分析1

在宿主机器中,使用docker stats 查看服务,内存占用内存792MB
在这里插入图片描述

在docker 容器中,通过ps aux命令查看容器中使用的总内存=29MB+147MB+139MB=315MB左右
在这里插入图片描述
使用kill命令杀死服务的workerman子进程(父进程不跑业务,并且在容器中杀不死),可以看到:

  • workerman子进程重新拉起后内存24MB+21MB=45MB,重新拉起后的进程内存占用减少239MB
  • doker stats 内存在kill后的内存减少了229MB

猜测:容器中只有wokerman的子进程会在执行导出后占用内存,并且使用ps命令也没有看到其他进程。怀疑:容器本身存在缓存,并且docker stat命令查看的内存值应该包含这部分缓存的内存。
在这里插入图片描述
在这里插入图片描述

分析2

使用docker stat查看容器的内存使用为:666MB
在这里插入图片描述
在容器中,使用htop命令查看容器中各个进程的总内存约为:27MB+118MB+85MB = 230MB左右(包含部分的代码缓存等)
在这里插入图片描述
在 /sys/fs/cgroup/memory/docker//memory.stat 中查看内存情况
在这里插入图片描述

验证猜想

为了验证确实是 cache占用的内存,我们手动清理cache缓存验证一下,如下

运行以下命令可以清理 PageCache:

  • sudo sh -c “echo 1 > /proc/sys/vm/drop_caches” (这将清空 PageCache 中的缓存数据,但不会影响正在使用的程序数据。)
    在这里插入图片描述
    可以看到,docker stats 的内存也从 666.MB降到了182MB,和 /sys/fs/cgroup/memory/docker//memory.stat 中查看内存情况基本一致。
    在这里插入图片描述
    在这里插入图片描述

结论和经验

结论:不是代码中的内存泄露,是cache缓存占用的内存。

经验:

  1. ps aux 查看的RSS只包含了物理内存,不包含 buffer/cache 内存
  2. 使用docker stats 命令查看到的内存数据不是实际上的物理内存,而是包含了cache部分,使用该数据用于监控不一定准确。
  3. /sys/fs/cgroup/memory/docker/<container-id>/memory.stat 可以看到docker容器实际的内存使用情况(很有用!!)
  4. 如有必要,可以使用 sudo sh -c "echo 1 > /proc/sys/vm/drop_caches" 释放cache内存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

白话:大型语言模型中的幻觉(Hallucinations)

大型语言模型&#xff08;LLM&#xff09;可是自然语言处理和人工智能的一大步。它们能做的事情可多了&#xff0c;比如生成听起来挺靠谱的文本&#xff0c;翻译语言&#xff0c;总结文档&#xff0c;甚至写诗。但你知道吗&#xff0c;这些模型有时候会出现 “幻觉&#xff08;…

音视频开发常见的开源项目

FFmpeg 地址&#xff1a;https://ffmpeg.org/介绍&#xff1a;FFmpeg 是一个非常强大的开源多媒体框架&#xff0c;它可以用来处理视频和音频文件。它支持多种格式的转换、编码、解码、转码、流处理等。FFmpeg 包括了 libavformat、libavcodec、libavutil、libswscale、libpos…

Matlab求解微分方程(解析解与数值解)

matlab求解微分方程解析解和数值解 Matlab求微分方程解析解例题1例题2例题3 Matlab求微分方程数值解一阶微分方程例题一例题二 高阶微分方程例题 Matlab求微分方程解析解 dsolve(eqns,conds,options) eqns:微分方程&#xff08;组&#xff09;、conds&#xff1a;初值条件、opt…

萌宠宜家商城系统

摘 要 随着现在经济的不断发展和信息技术性日益完善和优化&#xff0c;传统式数据信息的管理升级成手机软件存放、梳理和数据信息集中统一处理的管理方式。本萌宠物宜家商城系统软件起源于这个环境中&#xff0c;能够帮助管理者在短期内进行庞大数据信息。使用这个专业软件能够…

【开源免费】基于SpringBoot+Vue.JS购物商城网站(JAVA毕业设计)

本文项目编号 T 032 &#xff0c;文末自助获取源码 \color{red}{T032&#xff0c;文末自助获取源码} T032&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

文字识别多功能工具箱 | eSearch v13.1.6

eSearch v13.1.6 是一款开源的截屏识屏搜索工具&#xff0c;它提供了丰富的功能&#xff0c;包括截屏、OCR识别、搜索翻译、贴图、以图搜图和录屏等一体化实用工具。该软件基于 Electron 框架开发&#xff0c;适用于 Linux、Windows 和 macOS 平台。 软件的主要特点和功能包括…

Lua发邮件:实现自动化邮件发送教程指南!

Lua发邮件高级技巧有哪些&#xff1f;如何利用Lua发送电子邮件&#xff1f; 自动化邮件发送是一个非常实用的功能&#xff0c;广泛应用于各种场景&#xff0c;如通知、提醒、报告生成等。Lua作为一种轻量级脚本语言&#xff0c;因其简洁和高效而受到广泛欢迎。AokSend将详细介…

金钥匙系列:Kubernetes (K8s) 服务集群技术栈学习路线

维护Kubernetes (K8s) 服务集群是一个复杂且多层次的技术任务&#xff0c;涉及容器化技术、集群管理、网络、安全、监控等多个领域。为了成为一名优秀的K8s集群维护工程师&#xff0c;技术栈需要广泛且深入。本文将为你详细介绍从零开始到深入掌握K8s集群维护的职业技术栈学习路…

在 Mac 上安装双系统会影响性能吗,安装双系统会清除数据吗?

在 Mac 系统安装并使用双系统已经成为了许多用户办公的选择之一&#xff0c;双系统可以让用户在 Mac 上同时运行 Windows 或其他操作系统。然而&#xff0c;许多用户担心这样做会对 Mac 的性能产生影响。 接下来将给大家介绍 Mac 装双系统会影响性能吗&#xff0c;Mac装双系统…

【Hue导入Hive文件类型数据(自动建表)】

1、进入Hue访问界面&#xff0c;点击要导入表的schema&#xff0c;点击号&#xff0c;上传要导入的文件。 2、本次测试文件数据用逗号分隔&#xff0c;也可根据文件分隔符选择具体格式 3、点击下一步&#xff0c;可自定义表名&#xff0c;以及选择字段数据类型&#xff0c;定…

【PyCharm】常用快捷键

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 PyCharm的所有快捷键&#xff0c;其实均可以自定义&#xff0c;在位于Settings -> Keymap的目录下&#xff08;如图&#xff09;&#xff0c;可以自行改写为自己熟悉的键位组合。 若更改为PyCharm已存在的键…

【网络安全】PHP配置注入漏洞

未经许可&#xff0c;不得转载。 文章目录 正文 正文 前提&#xff1a;通过探测等方式发现某个 PHP 文件存在 PHPRC 参数&#xff1a; curl "https://xxx.com/about.php?PHPRC/dev/fd/0" --data-binary auto_prepend_file"/etc/passwd"PHPRC 用于指定 P…

灵雀云DevOps:加速应用交付,点燃业务创新引擎

导语 近日&#xff0c;国际知名咨询机构Gartner发布了2024年度DevOps平台魔力象限报告&#xff08;Gartner Magic Quadrant for DevOps Platforms&#xff09;&#xff0c;为信息化决策者在技术战略层面提供了选型和评估DevOps平台供应商的全面视角。报告中&#xff0c;中国云…

el-table 如何实现行列转置?

在某些需求里需要用到 行列转置 的表格&#xff0c;但 el-table 提供的基本表格是不支持行列转置的&#xff0c;这样就需要对这个表格进行二次开发。下面来看具体实现的效果&#xff1a; 具体实现方式 基本原理就是对原有的可渲染的数据结构进行处理&#xff0c;表头与表格数…

Linux学习笔记8 理解Ubuntu网络管理,做自己网络的主人

本文讲解了Ubuntu下网络由什么管理&#xff0c;介绍了临时ip和路由的设置方法&#xff0c;介绍了静态持久化网络配置的方法以及各网络管理软件之间的关系。 来看看Ubuntu网络管理。 序言 原本学习ubuntu网络管理就是为了检查nginx安装过程中使用wget获取压缩包为什么解析不出…

python + ssh+ rich 升级和备份脚本

升级版本 &#xff08;根据AI提供的脚本,修改后&#xff09; import os import paramiko from scp import SCPClient from rich.progress import (BarColumn,DownloadColumn,Progress,TaskID,TextColumn,TimeRemainingColumn,TransferSpeedColumn, )def get_file_size(file_pat…

【mujoco( DeepMind )】入门学习记录1

更新日期&#xff1a;202409 前言&#xff1a; 记录下自己学习Mujoco历程&#xff0c;直接使用deepMind官方给的python使用方案。 平台&#xff1a; python 3.12: DeepMind维护的Mujoco可以直接在3.8版本以后的python中直接安装。 Anacoda&#xff1a;利用anacoda管理的自己p…

删除字符串末尾的*(星号)

要求 假定输入的字符串中只包含字母和*号。请编写函数fun&#xff0c;它的功能是:将字符串尾部的*号全部删除&#xff0c;前面和中间的*号不删除, 例如&#xff0c;字符串中的内容为:****A*BC*DEF*G******&#xff0c;删除后&#xff0c;字符串中的内容应当是:***A*BC*DEF*G。…

用Python获取PDF页面的大小、方向和旋转角度

在文档管理和自动化领域&#xff0c;了解PDF文档的内在属性&#xff08;如页面大小、方向和旋转角度&#xff09;对于确保一致的文档处理和布局保真度至关重要。这些属性在内容重用、归档以及PDF无缝集成到网络环境或其他数字工作流程中起着关键作用&#xff0c;因为它们直接影…

Leetcode面试经典150题-162.寻找峰值

解法都在代码里&#xff0c;不懂就留言或者私信 想清楚的话会特别简单&#xff0c;你可能想不到这是个二分。。。 class Solution {/**本题题目规定我们只能用O(logN)的时间复杂度来解题&#xff0c;这显然就是让二分嘛而题目给的数组本身是无需&#xff0c;怎么二分呢其实我…