服务器随着运行时间的增加,占用内存会逐渐增加。如果服务器内存小,就很容易出现内存占满,系统变慢,甚至是卡死的情况。一个办法是增加物理内存,但这涉及到费用、停机、开机箱等。这里有一个处理方案,可供借鉴。效果好的话,可以不用买内存条了哈哈。
如果你分析各个进程占用内存大小,然后把它们加一起,发现并不等于总占用内存的大小。那为什么free -m指令显示剩余的内存那么小呢?内存用来做什么了呢?
原来操作系统运行中会自己选择部分数据缓存到内存中,free -m结果中
-/+ buffers/cache: 后面统计的就是缓存数据的情况
缓存使用的物理内存加上进程占用物理内存,才是总的物理内存。
为了保护服务不会因为物理内存占用过高而卡死,可以定时计划crontab中每隔一小时清空操作系统的缓存数据,配置如下。表示每当到整点的45分时,执行
echo 3 > /proc/sys/vm/drop_caches 命令,清除操作系统缓存。
[root@localhost ~]# crontab -l
45 * * * * echo 3 > /proc/sys/vm/drop_caches
事实表明,清除缓存不但没有降低系统的速度,速度还明显提高了。当然,我的实验场景是物理内存本来就小只有8G,并且系统访问用户不大的情况。其它系统是否适用还没有数据支持。