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

news/2024/9/20 4:00:21/ 标签: docker, php

文章目录

  • 问题描述
  • 原因分析
    • 分析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.ppmy.cn/news/1527879.html

相关文章

智能负载均衡:分布式缓存的高效能解决方案

在当今快速发展的互联网时代&#xff0c;分布式缓存成为了提升网站性能和用户体验的关键技术。本文将深入探讨负载均衡算法在分布式缓存中的应用&#xff0c;分析各种算法的优缺点&#xff0c;并提供选择最佳算法的指导。通过实际案例&#xff0c;我们将展示如何通过智能的负载…

用Kimi输出流程图

1.输入 我希望设计一个ERP系统&#xff0c;请帮我简单列一个流程图&#xff0c;用mermaid输出2.输出

MySQL高级功能-窗口函数

背景 最近遇到需求&#xff0c;需要对数据进行分组排序并获取每组数据的前三名。 一般涉及到分组&#xff0c;第一时间就是想到使用group by对数据进行分组&#xff0c;但这样分组&#xff0c;到最后其实只能获取到每组数据中的一条记录。 在需要获取每组里面的多条记录的时候…

【笔记】枚举

文章目录 枚举的概念枚举步骤例题&#xff1a;百鸡百钱方案1方案二方案三 例题 枚举的概念 枚举&#xff1a;逐个尝试所有可能的方案。 先把问题划分成一系列离散的状态&#xff0c;然后遍历这些状态来求解问题。 比如求3x5y10的正整数解有多少&#xff0c;把x∈[0&#xff…

傅里叶变换的基本性质和有关定理

一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…

【笔记篇】Davinci Configurator TcpIp模块

目录 1 简介1.1 架构概览2 功能描述2.1 特性2.2 TCP/IP协议栈2.2.1 IPv62.2.2 IPv42.3 初始化2.3 状态机2.4 主函数2.5 故障处理3 集成3.1 静态文件3.2 动态文件4 API描述5 配置5.1 Socket 拥有者配置5.1.1 `<Up>_CopyTxData` callback5.2 单播地址分配方法5.2.1 IPv4 单…

【GeekBand】C++设计模式笔记1_介绍

1. 课程目标 理解松耦合设计思想掌握面向对象设计原则掌握重构技法改善设计掌握GOF核心设计模式 2. 什么是设计模式 目标&#xff1a;复用&#xff0c;以不变应万变 3. GOF设计模式 4. 从面向对象谈起 5. 深入理解面向对象 向下&#xff1a;深入理解三大面向对象机制 封装&…

Gitlab学习(009 gitlab冲突提交)

尚硅谷2024最新Git企业实战教程&#xff0c;全方位学习git与gitlab 总时长 5:42:00 共40P 此文章包含第30p-第p34的内容 文章目录 冲突提交不同人修改不同文件不同人修改同文件的不同区域不同人修改同文件的相同区域 同时变更文件名和文件内容gitLab功能拓展code review代码复…

Vue3: setup语法糖

一. setup语法糖 在 Vue 3 中&#xff0c;setup 语法糖是一种简化组件内部状态和方法管理的特性。它允许你将组件的逻辑直接编写在组件的定义中&#xff0c;而不是像 Vue 2 那样需要在 methods 和 data 属性中管理。setup 语法糖基于 ES6 的类的静态方法&#xff0c;允许你更灵…

HttpMediaTypeNotAcceptableException: No acceptable representation问题解决方法

Background org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation HttpMediaTypeNotAcceptableException: No acceptable representation 异常通常发生在Web应用程序中&#xff0c;客户端请求了一个资源&#xff0c;但是…

【Elasticsearch系列七】索引 crud

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Redisson 分布式锁的使用详解

一、分布式锁的概述 1.1 分布式锁的背景 在单机系统中&#xff0c;Java 提供了 synchronized 和 Lock 等锁机制来确保并发情况下的线程安全。然而&#xff0c;在分布式系统中&#xff0c;多个服务实例运行在不同的物理或虚拟机上&#xff0c;无法直接使用这些本地的锁机制来控…

Activiti7《第二式:破剑式》——工作流中的以柔克刚

冲冲冲&#xff01;开干 这篇文章将分为九个篇章&#xff0c;带你逐步掌握工作流的核心知识。这篇文章将带你深入探讨工作流中的 “破剑式”&#xff0c;揭示如何通过 柔与刚 的结合来破解工作流的复杂性。本篇包含了 Activiti7 环境的进一步优化和表结构的深入分析&#xff0…

【读书笔记-《30天自制操作系统》-22】Day23

本篇内容比较简单&#xff0c;集中于显示问题。首先编写了应用程序使用的api_malloc&#xff0c;然后实现了在窗口中画点与画线的API与应用程序。有了窗口显示&#xff0c;还要实现关闭窗口的功能&#xff0c;于是在键盘输入API的基础上实现了按下按键关闭窗口。最后发现用上文…

O1-preview:智能预测与预取驱动的性能优化处理器设计OPEN AI

# 创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; O1-preview 是一种用于性能优化的处理器设计原理&#xff0c;主要通过智能预测和数据预取来提升处理器的执行效率。以下是对 O1-preview 原理的详细介绍&#xff0c;以及它相对于以往的…

时空大数据平台:激活新质生产力的智慧引擎

在数字化转型的浪潮中&#xff0c;时空大数据平台以其独特的价值&#xff0c;成为推动新质生产力发展的关键力量。本文不仅深入剖析时空大数据平台的定义与内涵&#xff0c;探讨其在智慧城市、智慧农业、环境管理、应急管理等领域的应用成效&#xff0c;还将详尽阐述平台如何通…

海鲜市场|基于springboot的网络海鲜市场系设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已…

ceph clients failing to respond to cache pressure

问题描述 prometheus 告警 🚨 触发中告警 [1] MDS_CLIENT_RECALL告警详请 🚨 触发中告警 [1] ⁣告警名称 : RookCephHealthWarn告警级别 : WARNING告警实例 : MDS_CLIENT_RECALL 告警状态 : 🚨 FIRING开始时间 : 2024-09

清理C盘缓存,如何针对Windows10系统,专业地调整和优化C盘缓存设置

在Windows10系统中&#xff0c;合理地管理C盘&#xff08;通常是系统盘&#xff09;的缓存设置&#xff0c;对于保持系统性能、提升响应速度以及避免磁盘空间不足等问题至关重要。缓存主要涉及到系统文件、临时文件、应用程序缓存等多个方面。下面将详细介绍如何针对Windows10系…

HarmonyOS开发实战( Beta5.0)蓝牙实现服务端和客户端通讯详解

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例分为服务端和客户端两个功能模块。 服务端创建蓝牙…