IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。
因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的。
drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
?

# sync

# echo 1 > /proc/sys/vm/drop_caches

# echo 2 > /proc/sys/vm/drop_caches 

# echo 3 > /proc/sys/vm/drop_caches

手动执行后,只是暂时解决问题,我们可以写一个脚本配合定时任务来定时检查清除缓存:

#!/bin/bash
Mem=$(free -m | awk 'NR==2' | awk '{print $4}')
if [ $Mem -gt 1024 ];
     then
echo "Service memory capacity is normal!" > /dev/null
     else
sync
echo "1" > /proc/sys/vm/drop_caches
echo "2" > /proc/sys/vm/drop_caches
echo "3" > /proc/sys/vm/drop_caches
sync
fi

最后,只需将脚本加入定时任务,即可!

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

[root@localhost bigdata-software]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  go  include  java  lib  lib64  libexec  sbin  share  src
[root@localhost local]# cd go
[root@localhost go]# ls
api  AUTHORS  bin  codereview.cfg  CONTRIBUTING.md  CONTRIBUTORS  doc  lib  LICENSE  misc  PATENTS  pkg  README.md  SECURITY.md  src  test  VERSION
[root@localhost go]# pwd
/usr/local/go
[root@localhost go]# 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的比值

hcache查看系统缓存 - 走看看

三 关于清除journal日志

3.1 清除journal日志

清理方法可以采用按照日期清理,或者按照允许保留的容量清理

journalctl --vacuum-time=2d

journalctl --vacuum-size=500M
journalctl 清理journal日志 - 九重霄 - 博客园

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:10:24  更:2022-07-03 11:12:03 
 
开发: 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年5日历 -2024/5/18 23:35:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码