我使用过的Linux命令之free - 显示内存的使用情况

我使用过的Linux命令之free - 显示内存的使用情况

本文链接:http://codingstandards.iteye.com/blog/780289    (转载请注明出处)

用途说明

free命令用来显示内存使用情况。display information about free and used memory on the system。

常用参数

b 以字节为单位显示。
-k 以K字节为单位显示。默认显示。
-m 以兆字节为单位显示。

-s <seconds> 每隔多少秒重复执行。可编写一个脚本用于监控。

使用示例

示例一

[root@sunrise root]# free
                    total        used        free     shared    buffers     cached
Mem:       4091428    4073120      18308          0     112784    2564792
-/+ buffers/cache:    1395544    2695884
Swap:      8385888          0    8385888
[root@sunrise root]#

数值的单位是KBytes。

Mem开头的行:

total是指内存总数。比如这台机器4G内存,实际上已经扣除掉了作为显存的部分。

used是指操作系统已经使用的内存数。这部分既包括操作系统本身使用的部分,也包括应用程序已经使用的部分,还包括缓存的部分。

free是指操作系统还没有使用的内存数。我们通常看到这部分比较小。

shared已经废弃不用,总是显示0。

buffers和cached是指作为缓存的内存数。

-/+ buffers/cache开头的行:(重点看这行)

used列是指应用程序总共使用的内存数。等于Mem.used-Mem.buffers-Mem.cached。

free列是指应用程序还未使用的内存数。这个数据才是我们需要关注的空闲可用内存数。等于Mem.free+Mem.buffers+Mem.cached。

如果此行中free列的数据太小,那么就需要优化程序或者增加物理内存了。

示例二

[root@bbqztweb root]# free -s 60
             total       used       free     shared    buffers     cached
Mem:       1016532     996320      20212          0      97964     166716
-/+ buffers/cache:     731640     284892
Swap:      2040244     281544    1758700

             total       used       free     shared    buffers     cached
Mem:       1016532     996328      20204          0      97964     166724
-/+ buffers/cache:     731640     284892
Swap:      2040244     281544    1758700

             total       used       free     shared    buffers     cached
Mem:       1016532     996460      20072          0      97964     166724
-/+ buffers/cache:     731772     284760
Swap:      2040244     281544    1758700

             total       used       free     shared    buffers     cached
Mem:       1016532     996316      20216          0      97964     166740
-/+ buffers/cache:     731612     284920
Swap:      2040244     281544    1758700


[root@bbqztweb root]#

示例三

free命令实际上是根据/proc/meminfo生成的。-/+ buffers/cache:这行是计算出来的。

[root@bbqztweb root]# free -b; cat /proc/meminfo
             total       used       free     shared    buffers     cached
Mem:    1040928768 1017909248   23019520          0  100220928  172040192
-/+ buffers/cache:  745648128  295280640
Swap:   2089209856  288301056 1800908800
        total:    used:    free:  shared: buffers:  cached:
Mem:  1040928768 1017909248 23019520        0 100220928 371302400
Swap: 2089209856 288301056 1800908800
MemTotal:      1016532 kB
MemFree:         22480 kB
MemShared:           0 kB
Buffers:         97872 kB
Cached:         168008 kB
SwapCached:     194592 kB
Active:         667076 kB
ActiveAnon:     510760 kB
ActiveCache:    156316 kB
Inact_dirty:    125964 kB
Inact_laundry:   20508 kB
Inact_clean:     17308 kB
Inact_target:   166168 kB
HighTotal:      122044 kB
HighFree:         5564 kB
LowTotal:       894488 kB
LowFree:         16916 kB
SwapTotal:     2040244 kB
SwapFree:      1758700 kB
CommitLimit:   2548508 kB
Committed_AS:  1063004 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     2048 kB
[root@bbqztweb root]#

示例四

[root@bbqztweb root]# free -b -s 1 | grep 'buffers/cache:'
-/+ buffers/cache:  745574400  295354368
-/+ buffers/cache:  745574400  295354368
-/+ buffers/cache:  745574400  295354368
Ctrl+C
[root@bbqztweb root]# free -b -s 1 | grep 'buffers/cache:' | awk '{print $4}'
Ctrl+C

怪哉,没有显示任何输出。但下面的是可以输出东西的,难道管道线多了就不灵了?why?

[root@bbqztweb root]# free -b -s 1 | awk '{print $4}'                        
shared
22200320
295211008
1800908800

shared
22200320
295211008
1800908800


[root@bbqztweb root]#

问题思考

1. free的输出结果中buffers和cached的含义?

2. free -b -s 1 | grep 'buffers/cache:' 可以打印出结果,free -b -s 1 | grep 'buffers/cache:' | awk '{print $4}' 却打印不出任何东西,为什么?

相关资料

【1】扶凯 linux的free命令详解-内存是拿来用的不是拿来看的

【2】脚本的甜品屋 linux free命令: 显示内存信息

【3】小菜linux free命令详解

【4】阿邙的收藏夹 Free命令详解和释放linux Cache

返回 我使用过的Linux命令系列总目录

猜你喜欢

转载自codingstandards.iteye.com/blog/780289