服务器内存定时优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35559756/article/details/84058439

服务器内存定时优化

适用场景

​ 文件服务器

解决办法

​ 同时crontab定时执行清理内存脚本,脚本中检查内存并根据配置进行清理内存

实现

设置缓存优先级

echo 100 > /proc/sys/vm/vfs_cache_pressure

调小优先级使得可以尽可能的缓存数据,提高服务器读性能,同时,如果该值为10000的话,定时清理内存也就变得没有意义了

清理脚本

swap-warning.sh

#!/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 保存退出

猜你喜欢

转载自blog.csdn.net/qq_35559756/article/details/84058439