linux内存缓存占用过高分析和优化

1、什么是buffer/cache ?

buffer/cache其实是作为服务器系统的文件数据缓存使用的,尤其是针对进程对文件存在read/write操作的时候,所以当你的服务进程在对文件进行读写的时候,Linux内核为了提高服务的读写速度,则将会把文件放在此处的buffer/cache中进行缓存使用,由于Linux服务的特点便是任何事物都会以文件的形式进行存在,所以你会发现不管你是否对文件做了大规模的读写,机器的buffer/cache是一直都存在的,并且持续的增高不下,这是因为服务器所产生的网络连接也好,用户协议的(UDP)套接字也好,这部分的数据系统都会为应用程序创建对应的文件描述符,而这些文件描述符的使用,则又都会重新进入buffer/cache中做读写使用,所以这也是你的机器始终都会存在较高buffer/cache的原因,因为所有的文件读写都会用到buffer/cache,在内存合理的情况下。

2、需要注意的一些特点

在服务内存够用的情况下,Linux内核为了加快对文件的读写效率会将文件放入buffer/cache中以保证读写效率,但其实,尽管当你的应用程序对文件的读写运行结束后,buffer/cache也不会自动释放该部分内存,而是作为缓冲进行保留,等到你的服务进程在下一次进行相同文件的读写时就可以直接使用,省去了各种重新进行内存初始化的操作;所以这将会导致,当你的应用进程频繁对不同的文件进行读写时,你会发现服务所可以直接使用的free内存将会越来越少的一个重要原因;难道buffer/cache在这样无休止的缓存当中就不会自动释放?当然不是,当服务器在内存压力较大的情况下时,则将会自动进行内存的回收,作为free空间分给其它进程使用,这其中主要回收的一个内存则是buffer/cache的缓冲区内存块。

3、如何进行手动 buffer/cache 回收?

除了在系统进程内存使用较大压力的情况下进行内存的回收外,我们也可以进行手动的buffer/cache回收,但由于buffer/cache主要是用于文件的读写使用,所以进行文件回收时,一般常伴随系统的IO彪高,因为系统内核也对比cache中的数据与硬盘中的数据是否一致,如果不一致需要写回硬盘,然后才能进行内存的回收。

3.1将内存中数据强制先刷新到磁盘中

sync;

3.2清理Buffer缓存区域

echo 3 > /proc/sys/vm/drop_caches 表示清除pagecache和slab分配器中的缓存对象

echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。

echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)

注:slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。

4、监控报警可用内存空间不足常规的解决方案如下:

增加内存(增加成本)

增加虚拟内存(影响性能)

定期清理缓存(echo 1 > /proc/sys/vm/drop_caches)

5、问题分析

5.1 监控系统负载情况

通过监控系统负载情况(vmstat 1),确定是页面缓存(cache项)占用量大,并且释放页面缓存后,从块设备读入数据量(bi项)会马上增加,如果bi或bo长期不等于0,表示内存不足。

5.2监控io情况

通过监控io情况(iostat -x -k 1)也可以看出

5.3监视磁盘I/O使用状况

基于此可以猜测是有进程在频繁的读取文件导致,监视磁盘I/O使用状况(iotop -oP),释放页面缓存后有几个sed命令读取文件进程占用IO很高。

生产环境遇到服务buffer/cache 过高如何排查是由那几个进程引起的(hcache 的使用方式)

6、使有hcache缓存文件

全局显示10个最大的被缓存文件

[root@java ~]# hcache -top 10

注:查看指定进程ID所使用的buffer/cache的使用情况:hcache -pid 16322

7、使用losf查看当前所开启该文件的所有进程

通过上述所获取到的被缓存最大的文件名称后,可以直接通过 lsof file_name 得到当前所开启该文件的所有进程信息;

7.1显示使用 kbase-psrt.jar 的进程信息

7.2 获取当前进程号所打开的所有文件信息

更多关于lsof的使用,可以参考如下链接:https://www.cnblogs.com/sparkbj/p/7161669.html

8、内存详细信息

存放内存详细信息文件:/proc/meminfo

查看更详细的内存信息:

cat /proc/meminfo|grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"

  • MemFree:空闲的物理内存
  • MemAvailable:可用的物理内存,MemFree+Buffers+Cached
  • Buffers:(Buffer Cache)对磁盘块设备数据的缓存
  • Cached:(Page Cache)对文件系统上文件数据的缓存,MemFree+SReclaimable
  • SwapTotal:虚拟内存,利用磁盘空间虚拟出的一块逻辑内存
  • Shmem:进程间共同使用的共享内存
  • Slab:Linux内存管理机制
  • SReclaimable:Slab可回收部分
  • SUnreclaim:Slab不可回收部分

9、清除缓存策略:

定期清理缓存:echo 1 > /proc/sys/vm/drop_caches

  • 1:清除page cache
  • 2:清除slab分配器中的对象(包括目录项和inode)
  • 3:清除page cache和slab分配器中的对象

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

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

相关文章

机器学习之数学基础 时间复杂度和空间复杂度

机器学习之数学基础中,时间复杂度和空间复杂度是两个至关重要的概念,它们分别用于描述算法在执行过程中所需的时间和空间资源。在机器学习的各个领域中,从数据预处理到模型训练,再到最终的预测和评估,都需要考虑到这两…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版 VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U2 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链…

TMS320F280049学习4:GPIO输入检测

TMS320F280049学习4:GPIO输入检测 文章目录 TMS320F280049学习4:GPIO输入检测前言一、工程代码总结 前言 DSP的内部输入上拉是弱上拉,上拉后的电压只有2.1V左右,需要外部加上拉电阻,具体参考这篇文章。 一、工程代码…

UG编程序怎么加刀补:深度解析与实用技巧

UG编程序怎么加刀补:深度解析与实用技巧 在UG编程中,刀补的添加是一个关键且复杂的步骤。正确地进行刀补设置,不仅能提高加工精度,还能有效避免刀具磨损和工件损伤。本文将从四个方面、五个方面、六个方面和七个方面详细解析如何…

Scratch编程从入门到精通:探索编程的奇幻世界

Scratch编程从入门到精通:探索编程的奇幻世界 在数字化时代的浪潮中,编程技能已成为一项不可或缺的能力。而Scratch,作为一款为青少年设计的图形化编程语言,以其直观易懂的界面和强大的功能,成为了编程初学者的理想选…

HQL面试题练习 —— 求连续段的最后一个数及每个连续段的个数

目录 1 题目2 建表语句3 题解 题目来源:拼多多。 1 题目 有一张表t_id记录了id,id不重复,但是会存在间断,求出连续段的最后一个数及每个连续段的个数。 ----- | id | ----- | 1 | | 2 | | 3 | | 5 | | 6 | | 8 | | …

风电功率预测 | 基于支持向量机结合ARIMA-SVM实现风电功率预测附matlab代码

基本介绍 引言:介绍风电功率预测的背景和意义,以及目前常用的预测方法的局限性。 相关理论介绍: ARIMA模型:解释ARIMA模型的基本原理和应用范围,包括自回归(AR)、差分(I&#xff09…

网线制作(双绞线+水晶头)——T568B标准

参考视频:https://www.bilibili.com/video/BV1KQ4y1i7zP/ 1、使用剥线器 2、将线捋顺、排序、剪掉牵引线 记忆技巧 1.线序颜色整体是一浅一深 2.颜色顺序是黄、蓝、绿、棕 一个黄种人、从上向下看,分别看到的是蓝天、青草(绿)、泥土(棕色) 3.中间两根浅…

手撸一个动态多数据源注入框架

创建一个动态多数据源注入插件涉及到设计一个能够在运行时根据配置或参数动态选择和使用不同数据源的机制。在Java Spring框架中,这通常通过自定义数据源路由、配置管理和依赖注入来实现。以下是一个简化的示例,展示了如何创建一个基本的动态多数据源注入…

数据挖掘--聚类分析:基本概念和方法

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 聚类分析 聚类分析是把一个数据对象&…

Element UI上传图片和PDF,支持预览,并支持复制黏贴上传

背景 如上图&#xff0c;使用Element UI的el-upload组件&#xff0c;并且预览的时候可以展示图片和PDF格式文件&#xff1b; 做法 index.vue <template><div><el-uploadv-model"diaForm.list":limit"5":on-exceed"handleExceed"…

微信小程序毕业设计-综合文化信息管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

算法课程笔记——蓝桥第17次直播云课

算法课程笔记——蓝桥第17次直播云课 递归 改成signed&#xff0c;把所有int 改成longlong 100会越界

使用Ollama+OpenWebUI本地部署Gemma谷歌AI开放大模型完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; &#x1f916;Ollama部署LLM专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月4日10点50分 &#x1f004;️文章质量&#xff1…

axios设置 responseType为 “stream“流式获取后端数据

使用前景&#xff1a; 工作过程中遇到了后端接口响应过慢&#xff0c;前端界面一致loading的情况&#xff0c;这个时候可以尝试采用将Axios的responseType参数被设置为stream类型实现。 stream介绍&#xff1a; stream类型意味着你希望服务器响应的数据以Node.js流&#xff…

Vue-App桌面程序列表

Vue-App桌面程序列表 文章说明讲解视频核心代码效果展示项目链接 文章说明 采用Vue实现PC端的桌面程序列表&#xff0c;采用HBuilderX将程序转化为5App&#xff0c;实现移动端的适配&#xff1b;支持桌面打开新应用&#xff0c;底部导航展示当前应用列表&#xff0c;可切换或关…

php质量工具系列之PHPCPD

PHPCPD 用于检测重复代码&#xff0c;直观的说就是复制粘贴再稍微改改 该工具作者已经 停止维护 安装 composer global require --dev sebastian/phpcpd执行 phpcpd --log-pmd phpcpd_result.xml ./app参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中 ./app 是phpcpd扫…

spring cloud openFegin 如何通过配置指定访问本地服务

需求 本地联调的时候&#xff0c;不想把本服务注册到开发环境的nacos中&#xff0c;但是又想用到开发环境的其他服务&#xff0c;又不想影响到开发环境的使用(因为服务注册上去&#xff0c;默认就自动负载均衡)。 解决方案 利用配置的方式指定具体的ip spring:cloud:loadbalan…

Linux系统之部署Blog-Index导航页

Linux系统之部署Blog-Index导航页 一、Blog-Index介绍1.1 Blog-Index简介1.2 Blog-Index特点1.3 Blog-Index使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 Yarn介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装yarn 四…

VS-qt中运行程序时报错:fatal error RC1015:cannot open include file ‘afxres.h‘

开发环境&#xff1a;VS2015 qt5.12.10 点击运行时报错如下&#xff1a; 搜索了下afxres.h文件&#xff0c;发现位置如下&#xff1a; 看样子是VS中少安装了部分模块导致的&#xff0c;&#xff0c;看了同事的电脑&#xff0c;该文件应该是在以下目录中的&#xff1a; 所…