linux buffer/cache过大

1.查看buffer/cache

free -m

2.查找工具

查找buff/cache占用过大的程序

下载hcache(https://github.com/silenceshell/hcache

chmod 755 hcache

./hcache --top 10

 3. 修改rsyslog配置

vim /usr/lib/systemd/system/rsyslog.service

MemoryAccounting=yes

MemoryMax=80M

MemoryHigh=8M

重启

systemctl daemon-reload

systemctl restart rsyslog

4.提高rsyslog日志级别

将*.info改为*.err

vi /etc/rsyslog.conf

重启

systemctl daemon-reload

systemctl restart rsyslog

5.修改Journal配置

vim /etc/systemd/journald.conf

Storage=persistent

SystemMaxUse=1G

SystemMaxFileSize=10M

MaxRetentionSec=1month

ForwardToSyslog=no

ForwardToWall=no

Storage含义:

volatile 代表日志只存在内存中,即/run/log/journal/

persistent 代表日志只存在磁盘中,即/var/log/journal/

auto 代表日志存在磁盘中,或者内存中,取决于你是否创建/var/log/journal/目录,部分系统是需要手动mkdir -p /var/log/journal/,systemctl restart systemd-journald来解放内存。

none 日志不保留,全部drop,当你决定不使用systemd-journald的时候,你可以使用。

重启

systemctl restart systemd-journald

5.定时清理

#!/bin/bash
USED_CURRENT=`free -m | awk 'NR==2' | awk '{print $3}'`
FREE_CURRENT=`free -m | awk 'NR==2' | awk '{print $4}'`

logDate=$(date +"%Y-%m")
TARGETFILE="/root/script/logs/cleanLinuxCache-${logDate}.log"
DATETIME=$(date +"%Y-%m-%d %H:%M")
echo "===========================" >> $TARGETFILE
echo "执行清空缓存时间 ${DATETIME}" >> $TARGETFILE
echo "清理缓存前: | [已使用内存:${USED_CURRENT}MB][空闲内存:${FREE_CURRENT}MB]" >> $TARGETFILE

# clean when FREE_CURRENT less than FREE_CURRENT_MAX
FREE_CURRENT_MAX=300
if [ $FREE_CURRENT -le $FREE_CURRENT_MAX ]
then
	sync && echo 1 > /proc/sys/vm/drop_caches
	sync && echo 2 > /proc/sys/vm/drop_caches
	sync && echo 3 > /proc/sys/vm/drop_caches
	USED_CLEAN=`free -m | awk 'NR==2' | awk '{print $3}'`
	FREE_CLEAN=`free -m | awk 'NR==2' | awk '{print $4}'`
	echo "空闲内存不足${FREE_CURRENT_MAX}MB,清理缓存后: | [已使用内存:${USED_CLEAN}MB][空闲内存:${FREE_CLEAN}MB]" >> $TARGETFILE
else
	echo "空闲内存大于${FREE_CURRENT_MAX}MB,不需要清理缓存" >> $TARGETFILE
fi

版权声明:本文为leadseczgw01原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。