日期:2014-05-16  浏览次数:20612 次

(转)如何查看linux闲置和占用的内存
在Linux下查看内存我们一般用free命令, 也可以加-m参数,以M为单位显示。不加参数默认以kb为单位。

[root@scs-2 tmp]# free
                        total        used        free      shared     buffers     cached
Mem:       3266180    3250004      16176          0     110652    2668236
-/+ buffers/cache:     471116    2795064
Swap:      2048276      80160    1968116

下面是对Linux查看内存命令中这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。


区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。

这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。这就是为什么我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的
所以从应用程序的角度来说,

可用内存(空闲内存) = 系统free memory + buffers + cached = 系统total memory - 系统used memory

如上例:
2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。


补充1

Linux查看内存命令时如何看额定值

cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo

另外不建议查看/proc/kcore来判断的内存大小, 这个值并不准确。kcore这个文件指的的可被内核分配的空间,但根据实验来看,并非如此。其还提示说,在64bit的OS中,这个文件大小最大可以达到128T,因为64bit的OS最大寻址内存范围局限128T。
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore

补充2

如何产看一个进程占用内存的大小

测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存