Linux系统buff/cache过高问题处理

问题:

服务器用一段时间,buff/cache就会特别高

处理办法:

1.清理,但是发现很大一部分清理不掉

2.查看占用过高的进程,然后进行处理

3.清理journal日志

1.清理

创建脚本(直接执行也行,我是创建脚本便于后期清理,也可将脚本加入到定时任务中)

vi clear_cahe.sh

#!/bin/bash
echo "开始清除缓存"
sync;sync;sync
sleep 10
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
sync

授权

chmod 755 clear_cache.sh

然后执行,./clear_chache.sh

清理后发现,的确清理了一部分,但是很大一部分还是清理不掉

因此这个不能完全解决问题

2.查看占用过高的进程,然后进行处理

github 地址:https://github.com/silenceshell/hcache  
直接下载:
wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache 
chmod 755 hcache
mv hcache /usr/local/bin

使用hcache -top 10 查看占用最大的进程

cd /usr/local/bin

./hcache --top 10

发现 journal日志占用过高

3.清理journal日志

systemd-journal 的坑

默认的配置文件,配置了 Storage=auto。含义为:

  • 如果设置为 volatile,journal 将会保存在内存中,使用位于内存盘的 /run/log/journal 目录(会自动创建)
  • 如果设置为 persistent,journal 将会保存在磁盘中,使用 /var/log/journal 目录 (会自动创建),如果自动创建失败,以及针对启动早期磁盘尚未挂载成功的部分日志, 仍然记录在内存盘。
  • 如果设置为 auto,那么,如果 /var/log/journal 目录存在,则使用该目录记录到磁 盘,如果目录不存在(不会自动创建),则使用内存盘。
  • 如果设置为 none,完全不记录任何日志(但是仍然可以转发给 rsyslog)
  • 默认是 auto

而 默认并不会创建 /var/log/journal 目录,所以都在内存中,占中就会很高

清理 journal 的内存

  • 清除到只剩下最新的 100M 空间:journalctl --vacuum-size=100M
  • 清除到只剩下最近两小时:journalctl --vacuum-time=2h
  • 将内存盘中的数据刷到硬盘:journalctl --flush
  • 或者采用很黄很暴力的清除方法(不推荐):rm -rf /run/log/journal && systemctl restart systemd-journal

建议的解决办法:

以下方法任选一种即可

  • 方法一:创建 /var/log/journal 目录,然后使用 journalctl --flush 将内存盘中 的数据刷到硬盘
  • 方法二:修改 /etc/systemd/journald.conf,配置 Storage=persistent,然后重启 systemd-journal 并使用 journalctl --flush 将内存盘中的数据刷到硬盘
  • 方法三:修改 /etc/systemd/journald.conf,配置 Storage=none,然后重启 systemd-journal

重启命令

systemctl restart systemd-journald.service

我是更改了配置,并且创建了/var/log/journal,然后清理了journal的内存

清理后journal 降下来了

其他的程序再处理即可

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 系统中,buff/cache 是操作系统用来缓存磁盘数据的一种机制。当应用程序需要读取磁盘上的数据时,Linux 会先将这些数据缓存到内存中,以提高磁盘读取速度。当应用程序需要使用内存时,缓存数据会被清除,将内存返还给应用程序使用。 如果 buff/cache 内存占用过高,有几种可能的解决办法: 1. 调整 vm.dirty_ratio 和 vm.dirty_background_ratio 参数 vm.dirty_ratio 指定了内存中脏数据所占的最大比例,默认值为 20,意味着当内存中脏数据占用超过 20% 时,系统会开始写入磁盘。vm.dirty_background_ratio 指定了内存中脏数据所占的最小比例,默认值为 10,意味着当内存中脏数据占用低于 10% 时,系统会开始写入磁盘。 可以通过修改这两个参数的值来调整 buff/cache 内存占用。例如,将 vm.dirty_ratio 和 vm.dirty_background_ratio 的值都设置为 5,则系统会更频繁地把脏数据写入磁盘,从而减少内存中的缓存数据。 2. 调整 swappiness 参数 swappiness 是一个控制系统将内存中的数据交换到交换空间的程度的参数。默认值为 60,意味着当内存使用率达到 60% 时,系统会开始把一些数据写入交换空间。可以通过修改 swappiness 的值来调整系统的交换行为,从而影响 buff/cache 内存的占用。 例如,将 swappiness 的值设置为较低的 10,则系统会更倾向于保留内存中的缓存数据,从而减少交换行为,降低 buff/cache 内存占用。 3. 增加物理内存 如果系统中物理内存不足,buff/cache 内存占用就会相对较高。可以通过增加物理内存来减少 buff/cache 内存占用,从而提高系统的性能。 需要注意的是,增加物理内存并不是万能的解决办法,可能存在其他因素导致的 buff/cache 内存占用过高问题。在调整系统参数和增加物理内存之前,需要仔细分析系统的性能瓶颈和内存使用情况,找出问题的根本原因。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值