运维排查-使用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日志 - 九重霄 - 博客园

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运维变更管理流程是IT项目运维资料中的一个重要组成部分。它是指在IT项目运维过程中,对于运维变更的管理步骤和方法。在v1.3版本中,运维变更管理流程有以下几个关键步骤。 首先,运维变更管理流程的第一步是需求识别和评估。在这一步骤中,运维团队会与项目业务负责人沟通,了解需求变更的原因和影响范围,并进行评估,以确定变更是否合理和可行。 第二步是变更规划和设计。在这一步骤中,运维团队会制定变更计划,确定执行过程中所需的资源和时间,并制定详细的变更方案和测试策略。这一步骤的目的是为了确保变更顺利进行,能够满足业务需求。 第三步是变更实施和测试。在这一步骤中,运维团队会按照变更计划进行系统的更新、配置、安装或其他处理,并进行相应的测试,以确保变更不会对系统的稳定性和安全性产生负面影响。这一步骤的重点是确保变更的准确性和可靠性。 第四步是变更评估和审批。在这一步骤中,运维团队会对变更的实施结果进行评估,并进行相应的审批。评估的目的是检查变更是否达到了预期的效果,并在确保变更安全可靠的基础上进行批准。 最后一步是变更记录和文档管理。在这一步骤中,运维团队会将变更的详细记录和文档进行整理和存档,以备将来的参考和回溯。这样可以确保变更过程的可追溯性和可复现性。 通过以上的运维变更管理流程,IT项目运维团队能够有效地管理和控制运维变更的过程,确保变更的安全性、稳定性和可靠性,并提供变更过程的可追溯性和文档管理。这样可以最大程度地降低变更引起的风险和不确定性,确保系统的稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值