我使用过的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命令系列总目录
?