Linux系统内存占用90%以上——解决方法

Linux系统内存占用90%以上——解决方法

首先要明确一个问题:Linux系统内存占用90%以上,是否属于正常范围?网上有详细的解释,这属于正常现象~~~
www.2cto.com
Linux/Unix系统管理内存的方式和windows是不一样的,即便是一个负载很小的linux,跑几天后,内存占用量也将达到90%以上,即便无人访问,这个数字是完全正常的。但是,这个内存占用量不会达到100%的,每天夜里系统都会执行/etc/cron.daily进行内存优化。

Linux/Unix系统是非常稳健的,虽然内存占用显示90%以上,但依然可保证365天以上无须重启。对于Linux系统,评估其压力的主要指标是最近5分钟的负载指数:比如用w命令或者top去看,可以看到“0.70 0.35 0.01”这样的数字,分别表示5分钟内的、10分钟内的、15分钟内排队的进程数,只要第一个数字即5分钟内的负载不大于5,系统就是健康的,不用做任何维护;如果这个数字大于了5,那么通常系统速度就会变慢,一般有如下几种可能:
www.2cto.com
1) 有程序占用大量CPU,使用top命令来检查(看看是否有java程序锁死之类的故障)

2) 有程序占用大量内存,使得内存真正不够用了(这个才是真正需要加内存的时候),比如由于MySQL在较大负载下运行容量为GB级别的数据库导致内存不够用,需要给服务器插入更多物理内存

3) 磁盘系统读写故障,IO吞吐错误造成CPU负载上升,需要光盘引导进入单用户模式扫描修复磁盘,修不好就只能更换新硬盘了

因此,对于Linux/Unix系统内存占用的百分比,无须过于关心,一般检查系统负载参数即可

但也可以手动进行内存释放,具体操作如下:

[root@ajcheng]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@ajcheng]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@ajcheng]# echo 3 > /proc/sys/vm/drop_caches
[root@ajcheng]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@ajcheng]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.

 

 

Linux/Unix与windows在管理内存的方式上是不一样的。它的管理方式是充分的利用系统的内存,而windows则是无论使用多大的内存都要使用一定的虚拟内存(linux中swap)。

所以说即便是一个刚装上不久的linux系统 ,内存使用量达到90%,也很正常。但是,这个内存占用量不会达到100%的,因为当达到一个占用量的时候,就会启用swap(虚拟内存)。

  (关于为何会使用高的解释:

     a、linux把剩余的内存都用做磁盘缓存了,这样可以减少硬盘读写次数,Linux在磁盘操作上的速度是要比windows快的。这样做并不会影响系统速度。换句话说就是Linux 是先占用,然后再慢慢使用,windows是要用多少就占用多少。Linux 不会让内存空着的,程序用不了就当缓存用。

     b、桌面追求的是反应速度,服务器追求的是吞吐量,两者是有差别的,linux侧重后者。特别体现在任务调度、内存管理。从桌面的角度,尽量要保留一定的空闲内存(如果不够,先将后台进程swap出去),当用户要打开新程序的时候,可以迅速反应。桌面常用的模块预先驻留内存。而linux是著名的lazy的方式。

Linux/Unix系统是非常稳健的,虽然内存占用显示90%以上,但依然可保证365天以上无须重启。对于Linux系统,评估其压力的主要指标是最近5分钟的负载指数。比如用top去看,可以看到“2.20,2.27,1.81”这样的数字。

分别表示5分钟内的、10分钟内的、15分钟内排队的进程数。只要第一个数字即5分钟内的负载不大于5,系统就是健康的,不用做任何维护

如果这个数字大于了5,那么通常系统速度就会变慢,一般有如下几种可能:

1) 有程序占用大量CPU,使用top命令来检查(看看是否有java程序锁死之类的故障)

2) 有程序占用大量内存,使得内存真正不够用了(这个才是真正需要加内存的时候)

比如由于MySQL(和PHP搭配之最佳组合)在较大负载下运行容量为GB级别的数据库导致内存不够用,需要给服务器插入更多物理内存

3)磁盘系统读写故障,IO吞吐错误造成CPU负载上升,需要光盘引导进入单用户模式扫描修复磁盘,修不好就只能更换新硬盘了

因此,对于Linux/Unix系统内存占用的百分比,无须过于关心,一般检查系统负载参数即可。

 

linux命令free显示的cached和buffers有什么区别?

这是2个不同的概念来的。cached是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等的问题。
total used free shared buffers cached
Mem: 32058 23868 8189 0 400 18485
-/+ buffers/cache: 4982 27075
Swap: 7999 0 7999
从上面的信息可以看出。系统实际用了23868M,而buffers用了400,cached用了18485,前面的23868是包含了后面400的buffers和18485的cached,所以系统的物理内存的真实使用量是-buffers/cache=23868-400-18485=4983,为什么这样计算呢,因为buffers和cache其实也是内存的一部分,这部分特殊的内存是可以回收的,甚至如果需要我们还可以将这部分buffers和cache给释放出来,获得这部分的内存。

Comments are closed.