linux系统中,查看内存,最常用的就是free命令:
复制代码代码示例:
[root@oracle ~]# free
total [url][/url] used free shared buffers cached Mem: 3266180 3250004 16176 0 110652 2668236 -/+ buffers/cache: 471116 2795064 Swap: 2048276 80160 1968116
解释:
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. 所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
通过free命令查看机器空闲内存时,会发现free的值很小。
所以
空闲内存=free+buffers+cached=total-used
2795064=16176+110652+2668236=3266180-471116
什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
cat /proc/meminfo
[root@oracle ~]# cat /proc/meminfo MemTotal: 3266180 kB MemFree: 17456 kB Buffers: 111328 kB Cached: 2664024 kB SwapCached: 0 kB Active: 467236 kB Inactive: 2644928 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 3266180 kB LowFree: 17456 kB SwapTotal: 2048276 kB SwapFree: 1968116 kB Dirty: 8 kB Writeback: 0 kB Mapped: 345360 kB Slab: 112344 kB Committed_AS: 535292 kB PageTables: 2340 kB VmallocTotal: 536870911 kB VmallocUsed: 272696 kB VmallocChunk: 536598175 kB HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB
用free -m查看的结果:
[root@oracle ~]# free -m
total used free shared buffers cached Mem: 3189 3173 16 0 107 2605 -/+ buffers/cache: 460 2729 Swap: 2000 78 1921
第一部分Mem行:
total 内存总数: 3189M
used 已经使用的内存数: 3173M free 空闲的内存数: 16M shared 当前已经废弃不用,总是0 buffers Buffer 缓存内存数: 107M cached Page 缓存内存数:2605M 关系:total(3189M) = used(3173M) + free(16M)
第二部分,(-/+ buffers/cache):
(-buffers/cache) used内存数:460M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 2729M (指的第一部分Mem行中的free + buffers + cached) 可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。(从这里我们可以看出,实际上 :可用内存=第一部分Mem行中的free + buffers + cached,并不是只有free部分)
第三部分,交换分区 所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 linux只要不用swap的交换空间,就无需担心内存太少,如果常常swap用很多,就要考虑加物理内存了,这个可以作为判断linux内存是否够用的标准。
补充:
cat /proc/meminfo
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
buffers与cached的区别
#free
#man X #free #man X #free
你可以先后比较一下free后显示buffers的大小。
#free
#ls /dev #free 比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。
查看/proc/kcore文件的大小(内存镜像):
[root@oracle ~]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
复制代码代码示例:
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4 Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4 Shared(pages) 共享页数 0 Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4 Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4 Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4 dt(pages) 04
查看机器可用内存
复制代码代码示例:
/proc/28248/>free
total used free shared buffers cached Mem: 1023788 926400 97388 0 134668 503688 -/+ buffers/cache: 288044 735744 Swap: 1959920 89608 1870312 |