Linux中内存占有率高的问题,以及如何查看当前内存使用情况。

Linux在内存管理上和Windows有很大的不同。在Windows中,通常会通过任务管理器去看当前系统使用了多少内存,以此来判断内存是否充足。但是在Linux中就不一样,如果你用top命令来看当前系统进程情况,你可能会看到例如下面的内存使用结果:

Mem:   1555040k total,  1509124k used,    45916k free,    13280k buffers

used值几乎达到了100%。但是,这个并不是意味着真正的内存使用量。很多人特别是Linux的初级使用者,包括我刚刚接触Linux的时候也提过这样的问题:为何我的内存占有率这么高?
记住内存是拿来用的!不是拿来看的,不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读。这也就是windows为什么常常提示虚拟空间不足的原因。Linux 优先使用物理内存,当物理内存还有空闲时,linux是不会释放内存的。即使占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。
但是,如何才能得知目前的物理内存是够用的呢?我们可以通过vmstat命令来查看当前虚拟内存的使用情况。
比如下面的vmstat的结果

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 23776 50568 13280 948680 0 0 12 28 17 182 1 0 99 0

简单的我们可以看swap的si和so,内存够用的时候,这2个值都是0。如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。空闲内存(FREE)很少或接近于0时,不代表内存不够用了,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
你可以用 free 指令查看一下输出,用 used 减去 buffer 和 cache,才是你运行中的程序所占用的空间。

0 Responses to "Linux中内存占有率高的问题,以及如何查看当前内存使用情况。"