free
free命令用来显示内存的使用情况,使用权限是所有用户。
格式 free [-b -k -m] [-o] [-s delay] [-t] [-V]
-b -k -m 分别以字节(KB、MB)为单位显示内存使用情况。
-s delay 显示每隔多少秒数来显示一次内存使用情况。
-t 显示内存总和列。
-o 不显示缓冲区调节列
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
[[email protected] A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
130> free -b -s5 -t
total used free shared buffers cached
Mem: 8250933248 8088088576 162844672 409600 404414464 2350227456
-/+ buffers/cache: 5333446656 2917486592
Swap: 8388603904 84996096 8303607808
Total: 1663953715 8173084672 8466452480
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
0> free
total used free shared buffers cached
Mem: 8057552 7879480 178072 400 395020 2286772
-/+ buffers/cache: 5197688 2859864
Swap: 8191996 83192 8108804
total 总计物理内存的大小
used 已使用多大
free 可用有多少
Shared 多个进程共享的内存总额
Buffers/cached 磁盘缓存的大小
(-/+ buffers/cached)
used 已使用多大
free 可用有多少
第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别在于使用的角度来看,
mem是从OS的角度来看,对于OS,buffers/cached 都是属于被使用,可用内存是178072KB,已用内存是7879480KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。如上例:2859864=178072+395020+2286772
什么时候内存会被交换,以及按什么方交换? 当可用内存少于额定值的时候,就会开会进行交换。
查看额定值
[[email protected] A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> cat /proc/meminfo
MemTotal: 8057552 kB
MemFree: 174500 kB
Buffers: 395020 kB
Cached: 2293156 kB
SwapCached: 3412 kB
Active: 5091844 kB
Inactive: 2338840 kB
Active(anon): 3775600 kB
Inactive(anon): 967308 kB
Active(file): 1316244 kB
Inactive(file): 1371532 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 8191996 kB
SwapFree: 8108804 kB
Dirty: 32 kB
Writeback: 0 kB
AnonPages: 4740980 kB
Mapped: 20380 kB
Shmem: 400 kB
Slab: 358116 kB
SReclaimable: 321628 kB
SUnreclaim: 36488 kB
KernelStack: 4832 kB
PageTables: 13156 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 12220772 kB
Committed_AS: 5073712 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 161860 kB
VmallocChunk: 34359573104 kB
HardwareCorrupted: 0 kB
AnonHugePages: 4691968 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 10240 kB
DirectMap2M: 8378368 kB
[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> free -m
total used free shared buffers cached
Mem: 7868 7699 169 0 385 2239
-/+ buffers/cache: 5073 2795
Swap: 7999 81 7918
查看/proc/kcore文件的大小(内存镜像):
0> ll -h /proc/kcore
-r-------- 1 root root 4.0K 3月 2 11:20 /proc/kcore
占用内存的测量
测量一个进程占用了多少内存,linux提供了一个很方便的方法,/proc目录提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
0> cat /proc/self/statm
25233 135 117 11 0 67 0
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以 空闲内存=free+buffers+cached=total-used