Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148417
  • 博文数量: 44
  • 博客积分: 2330
  • 博客等级: 大尉
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 11:57
文章分类
文章存档

2012年(6)

2011年(32)

2010年(6)

分类: LINUX

2011-03-29 16:31:53

如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.
如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.

$ free -m
total used free shared buffers cached
Mem: 1002 769 232 0 62 421
-/+ buffers/cache: 286 715
Swap: 1153 0 1153

第一部分Mem行:
total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M

关系:total(1002M) = used(769M) + free(232M)

第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三部分是指交换分区, 我想不讲大家都明白.

我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪.
其实我们可以从二个方面来解释.
对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有232.
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路 径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

记住内存是拿来用的,不是拿来看的.不象windows, 无论你的真实物理内存有多少,他都要拿硬盘交换文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常 swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准哦.
 
 
cat /proc/meminfo 信息详解
 
MemTotal:       507480 kB 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)
MemFree:         10800 kB LowFree与HighFree的总和,被系统留着未使用的内存
Buffers:         34728 kB 用来给文件做缓冲大小
Cached:          98852 kB 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).
SwapCached:        128 kB 被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active:         304248 kB 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
Inactive:        46192 kB 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
HighTotal:           0 kB
HighFree:            0 kB 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
LowTotal:       507480 kB
LowFree:         10800 kB 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many
SwapTotal:      979956 kB 交换空间的总大小
SwapFree:       941296 kB 未被使用交换空间的大小
Dirty:              32 kB 等待被写回到磁盘的内存大小。
Writeback:           0 kB 正在被写回到磁盘的内存大小。
AnonPages:      216756 kB 未映射页的内存大小
Mapped:          77560 kB 设备和文件等映射的大小。
Slab:            22952 kB 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:    15512 kB 可收回Slab的大小
SUnreclaim:       7440 kB 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
PageTables:       2640 kB 管理内存分页页面的索引表的大小。
NFS_Unstable:        0 kB 不稳定页表的大小
Bounce:              0 kB
CommitLimit:   1233696 kB
Committed_AS:   828508 kB
VmallocTotal:   516088 kB
VmallocUsed:      5032 kB
VmallocChunk:   510580 kB
 
 
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应
的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (V***ata+ VmStk )4
dt(pages) 04
阅读(1452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~