版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35559756/article/details/84058439
服务器内存定时优化
适用场景
文件服务器
解决办法
同时crontab定时执行清理内存脚本,脚本中检查内存并根据配置进行清理内存
实现
设置缓存优先级
echo 100 > /proc/sys/vm/vfs_cache_pressure
调小优先级使得可以尽可能的缓存数据,提高服务器读性能,同时,如果该值为10000的话,定时清理内存也就变得没有意义了
清理脚本
#!/bin/bash
echo 'prepare to record the log:' >> swap-warning-log.log.$(date "+%Y%m%d-%H")
#提取本服务器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
#系统分配的交换分区总量
swap_total=`free -m | grep Swap | awk '{print $2}'`
#当前剩余的交换分区free大小
swap_free=`free -m | grep Swap | awk '{print $4}'`
#当前已使用的交换分区used大小
swap_used=`free -m | grep Swap | awk '{print $3}'`
if (($swap_used != 0)); then
#如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
#设置交换分区的告警值为20%(即使用超过80%的时候告警)。
swap_warn=0.20
#当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
swap_now=`expr $swap_per \> $swap_warn`
#如果当前交换分区使用超过80%(即剩余小于20%,上面的返回值等于0),立即发邮件告警
if (($swap_now == 0)); then
echo " $IP服务器swap交换分区只剩下 $swap_free M 未使用,剩余不足20%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器内存告警" >> swap-warning-log.log.$(date "+%Y%m%d-%H")
echo 2 > /proc/sys/vm/drop_caches
fi
fi
使用文档
创建目录
mkdir /目录/swap-warning
进入该目录
cd /目录/swap-warning
vi swap-warning.sh
输入i
复制swap-warning.sh文件中的内容该文件里面
按键esc 输入 :wq 保存退出
设置可执行权限
chmod 777 swap-warning.sh
创建定时任务
crontab -e
输入添加
# minute hour day month week command
SHELL=/bin/bash
* */2 * * * cd /目录/swap-warning/ && ./swap-warning.sh
按键esc 输入 :wq 保存退出