试解Linux中的free
在我的机器上运行free命令:
root@Localhost:/home/hayfeng# free
total used free shared buffers cached
Mem: 153832 141612 12220 0 17340 94580
-/+ buffers/cache: 29692 124140
Swap: 281096 10432 270664
第一行:
total = used + free | 153832 = 141612 + 12220
第二行:
-buffers/cache(代表用户程序使用的空间,不包括内核为用户线程加载的文件映射):
= used - ( buffers + cached ) | 29692 = 141612 - ( 17340 + 94580 )
+buffers/cache(代表用户进程可以使用的空间),当然内核映射的线性文件也可以映射给用户进程,因此:
= free + ( buffers + cached ) | 124140 = 12220 + ( 17340 + 94580 )
-----
从上面的-buffers/cache 和 + buffers/cache 来看,buffers和cached是属于内核的,但可以被用户进程使用。因此:
1、计算用户进程所使用的物理内存时的计算方法是:已经用掉的内存总量减去buffers和cached。(哎,难道内核线程不需要私有内存了?)
2、计算用户进程所能够使用物理内存时的计算方法是:可用的物理内存总量加上buffers和cached。因为内核映射的物理内存可以被用户进程共享嘛。
这些东西,会者不难,难者不会啊!
该文章讨论贴:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=747039&page=0&view=expanded&sb=5&o=7&fpart=
root@Localhost:/home/hayfeng# free
total used free shared buffers cached
Mem: 153832 141612 12220 0 17340 94580
-/+ buffers/cache: 29692 124140
Swap: 281096 10432 270664
第一行:
total = used + free | 153832 = 141612 + 12220
第二行:
-buffers/cache(代表用户程序使用的空间,不包括内核为用户线程加载的文件映射):
= used - ( buffers + cached ) | 29692 = 141612 - ( 17340 + 94580 )
+buffers/cache(代表用户进程可以使用的空间),当然内核映射的线性文件也可以映射给用户进程,因此:
= free + ( buffers + cached ) | 124140 = 12220 + ( 17340 + 94580 )
-----
从上面的-buffers/cache 和 + buffers/cache 来看,buffers和cached是属于内核的,但可以被用户进程使用。因此:
1、计算用户进程所使用的物理内存时的计算方法是:已经用掉的内存总量减去buffers和cached。(哎,难道内核线程不需要私有内存了?)
2、计算用户进程所能够使用物理内存时的计算方法是:可用的物理内存总量加上buffers和cached。因为内核映射的物理内存可以被用户进程共享嘛。
这些东西,会者不难,难者不会啊!
该文章讨论贴:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=747039&page=0&view=expanded&sb=5&o=7&fpart=
评论
发表评论