在 Linux 中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是 Linux 内存管理的一个优秀特性,在这方面,区别于 Windows 的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高 Linux 系统的数据访问性能。而 Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而 Windows 只将其做为摆设。
综上所述,一般不需要太关注 Linux 的内存占用情况,如果 SWAP 占用率很高的话一般可能就是内存不够用了。swap 存在的意义在于存放不经常使用的数据,而不是物理内存放不下的数据,如果经常使用的数据在物理内存中存放不下,内核会被迫将部分数据分配到 swap,接下来会产生大量的硬盘读写 IO,大量的硬盘读写 IO 会产生的后果为:
CPU 在处理运算时会有大量的时间在等待硬盘 IO,严重影响服务器的响应速度;
同服务器上的其他VPS都会受到影响(可能导致服务商停止服务);
临时解决办法
将下面内容保存到 /root/mem.sh ,这个脚本的意思是使用内存超过 512M 就重启,512 可以改为合适的数字
- #!/bin/sh
- used=`free -m|grep Mem:|awk ‘{print $3}’`
- if [ $used –gt 512]
- then
- reboot
- else
- echo “ok”
- fi
给予权限 755 以上,或者执行下面命令:
- chmod +x /root/mem.sh
再添加一行定时任务/var/spool/cron/root:
- */5 * * * * /root/mem.sh > /home/wwwlogs/mem.log