问题:
服务器用一段时间,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
降下来了
其他的程序再处理即可