定位 发表于 2016-10-22 00:04:47

Centos释放内存以及自动脚本

最近服务器老是运行缓慢
free -m 查看,发现内存跑满了。
再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%。
那是什么占用的呢?
百度了一下,据说是centos为了提高效率,把部分使用过的文件缓存到了内存里。
如果是这样的话,我又不需要这样的文件性能,那就可以释放。如下两个命令就可以:
#sync
#echo 3 > /proc/sys/vm/drop_caches
内存释放后,就占用很低了

可以定时执行吗?百度了一个脚本过来。


[*]# 脚本开始
[*]#
[*]##########################
[*]#  Freemem by vpshz.com
[*]##########################
[*]#!/bin/sh
[*]Time1=`date +%Y%m%d`
[*]Time2=`date +%k:%M:%S`
[*]mkdir /backup/freemem/
[*]cd /backup/freemem/
[*]#
[*]#echo "">memstat_$Time1.log
[*]#
[*]echo $Time1--$Time2 >>memstat_$Time1.log
[*]echo "------------------" >>memstat_$Time1.log
[*]echo "The mem stat is :" >>memstat_$Time1.log
[*]echo "" >>memstat_$Time1.log
[*]free >>memstat_$Time1.log
[*]echo "" >>memstat_$Time1.log
[*]#sync
[*]echo "....Freeing......" >>memstat_$Time1.log
[*]echo "">>memstat_$Time1.log
[*]#
[*]echo 1 > /proc/sys/vm/drop_caches
[*]echo 2 > /proc/sys/vm/drop_caches
[*]echo 3 > /proc/sys/vm/drop_caches
[*]echo "---> OK ! " >>memstat_$Time1.log
[*]echo "">>memstat_$Time1.log
[*]free >>memstat_$Time1.log
[*]echo "=========================================================================">> memstat_$Time1.log
[*]echo "">>memstat_$Time1.log
[*]echo "">>memstat_$Time1.log
[*]cd -
[*]cat /backup/freemem/memstat_$Time1.log
[*]# 脚本结束



另外一个脚本如下:


[*]# vim /backup/freemem/freemem.sh
[*]#!/bin/bash
[*]used=`free -m | awk 'NR==2' | awk '{print $3}'`
[*]free=`free -m | awk 'NR==2' | awk '{print $4}'`
[*]echo "===========================" >> /backup/freemem/mem.log
[*]date >> /backup/freemem/mem.log
[*]echo "Memory usage | " >> /backup/freemem/mem.log
[*]if [ $free -le 200 ] ; 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
[*]                echo "OK" >> /backup/freemem/mem.log
[*]else
[*]                echo "Not required" >> /backup/freemem/mem.log



赋予脚本执行权限   chmod 777 /backup/freemem/freemem.sh
或者chmod +x ./backup/freemem/freemem.sh
定时执行的办法:echo "*/30 * * * * root /backup/freemem/freemem.sh" >> /etc/crontab

此外还可以通过修改/etc/sysctl.conf的方法来达到自动释放缓存的目的。   但是内存不够用,最好还是去找找其他的原因,比如程序设置是否合理,是否突发访问量很大,或者程序设计不合理导致内存溢出等,毕竟操作系统本身设计会考虑各方面的问题,强制腾出cache的大小,可能只是把问题给暂时屏蔽了,不利于判断问题的所在。

fannao123 发表于 2016-10-31 09:03:24

这个是需要的
页: [1]
查看完整版本: Centos释放内存以及自动脚本