linux的free命令

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 32 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

猜你喜欢

转载自blog.csdn.net/qq_36946274/article/details/80928676