关于云主机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 降下来了

其他的程序再处理即可

你可能感兴趣的:(服务器运维,运维,cache)