| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 运维排查-使用hcache插件排查Buffer/cache占用过高 -> 正文阅读 |
|
[系统运维]运维排查-使用hcache插件排查Buffer/cache占用过高 |
一 buffer和cache产生原因1.1?buffer和cache产生的原因?1.当你的服务进程在对文件进行读写的时候,Linux内核为了提高服务的读写速度,则将会把文件放在此处的 buffer/cache?中进行缓存使用,由于?Linux服务的特点便是任何事物都会以文件的形式进行存在,所以你会发现不管你是否对文件做了大规模的读写,机器的 buffer/cache?是一直都存在的,并且持续的增高不下,这是因为服务器所产生的网络连接也好,用户协议的(UDP)套接字也好,这部分的数据系统都会为应用程序创建对应的文件描述符,而这些文件描述符的使用,则又都会重新进入 buffer/cache?中做读写使用,所以这也是你的机器始终都会存在较高 buffer/cache?的原因。 2.?在服务内存够用的情况下,Linux内核为了加快对文件的读写效率会将文件放入buffer/cache?中 以保证读写效率,但其实,尽管当你的应用程序对文件的读写运行结束后,buffer/cache?也不会自动释放该部分内存,而是作为缓冲进行保留,等到你的服务进程在下一次进行相同文件的读写时就可以直接使用,省去了各种重新进行内存初始化的操作;所以这将会导致,当你的应用进程频繁对不同的文件进行读写时,你会发现服务所可以直接使用的free内存将会越来越少的一个重要原因;难道 buffer/cache?在这样无休止的缓存当中就不会自动释放?当然不是,当服务器在内存压力较大的情况下时,则将会自动进行内存的回收,作为free空间分给其它进程使用,这其中主要回收的一个内存,则是 buffer/cache?的缓冲区内存块; Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令 - 陈咬金 - 博客园 1.2?手动回收机制除了在系统进程内存使用较大压力的情况下进行内存的回收外,我们也可以进行手动buffer/cache回收,但由于buffer/cache主要是用于文件的读写使用,所以进行文件回收时,一般常伴随系统的IO彪高,因为系统内核也对比cache中的数据与硬盘中的数据是否一致,如果不一致需要写会,然后才能进行内存的回收; Linux具有先进的缓存机制,会针对dentry、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。
手动执行后,只是暂时解决问题,我们可以写一个脚本配合定时任务来定时检查清除缓存:
最后,只需将脚本加入定时任务,即可! Linux的buff/cache占用内存过高解决方法_一条很咸的的博客-CSDN博客_buff/cache过高 二 hcache插件2.1 hcache插件的作用hcache是基于pcstat的,pcstat可以查看某个文件是否被缓存和根据进程pid来查看都缓存了哪些文件。hcache在其基础上增加了查看整个操作系统Cache和根据使用Cache大小排序的特性。 2.2 hache的安装2.2.1 go语言环境的安装1.下载地址: wget?https://dl.google.com/go/go1.17.8.linux-amd64.tar.gz 2.将软件包上传到服务器上 ?3.将go安装包解压到/usr/local目录下 tar -zxvf go1.17.8.linux-amd64.tar.gz ?-C /usr/local 4.配置环境变量 vim? /etc/profile
配置内容如下: export GO_ROOT=/usr/local/go export PATH=$GO_ROOT/bin:$PATH 5.启用环境变量:? ?source ??/etc/profile 6.查看go是否安装成功: [root@localhost go]# source /etc/profile [root@localhost go]# go version go version go1.17.8 linux/amd64 2.2.2 hache的安装1.下载地址 https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache 2.上传服务器,赋予执行权限 ?chmod +x hcache 3.移动到/usr/local/bin/ mv hcache /usr/local/bin/ 4.输入命令: hcahe -top 10 查看占用最多的10个文件 ?2.2.3 内容显示解释?结果展示含义如下: name: 占有缓存的文件全路径 size: 文件大小 pages: 站了多少个Block cached:? 缓存使用了多少个Block Percent: cached与pages的比值 三 关于清除journal日志3.1 清除journal日志清理方法可以采用按照日期清理,或者按照允许保留的容量清理 journalctl --vacuum-time=2d journalctl --vacuum-size=500M |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 12:48:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |