读书频道 > 网站 > 网页设计 > Linux内核精髓:精通Linux内核必会的75个绝技
虚拟空间超额使用量的调整
13-02-20    奋斗的小年轻
收藏    我要投稿   
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Lin...立即去当当网订购

只存在一个进程时,即使不知道该进程的最大内存使用量,也可以使用已有的进程单位的资源限制功能对内存使用量进行充分限制。实际安装的内存为10GB时,可以使用ulimiti命令将该进程的最大虚拟空间大小设置为10GB。考虑到应用程序与虚拟空间大小相比要使用多少物理内存,也可以设置比10GB更大的虚拟空间大小(在Linux中未安装进程的物理内存驻留大小限制功能,因此无法使用。)

但是,考虑到多个进程互相争夺内存的情况,就需要限制整个系统的虚拟空间量。如上所述,即使无限度地向进程分配虚拟空间,只要不实际使用也就没问题。分配给进程的虚拟空间的大小与本质上实际安装的物理量无关。但是,从系统的稳定性来看,分配的虚拟空间大小应该保证达到物理内存的量。将没有物理内存保证的虚拟空间进行大量分配,并实际访问时,如果同时分配大量的物理页面,系统就会崩溃。

在Linux中有规定“允许超过物理内存量分配多少虚拟空间”的参数,通过下列两个/proc入口来进行控制。
 /proc/sys/vm/overcommit_memory
 /proc/sys/vm/overcommit_ratio
/proc/sys/vm/overcommit_memory是控制虚拟空间分配的策略的参数,可以设置下列3种值。
 OVERCOMMIT_GUESS(0)
 OVERCOMMIT_ALWAYS(1)
 OVERCOMMIT_NEVER(2)

默认为OVERCOMMIT_GUESS。
# cat/proc/sys/vm/overcommit_memory
0

设置为OVERCOMMIT_NEVER时,执行下列命令。
# echo 2 > /proc/sys/vm/overcommit_memory

可以在/proc/sys/vm/overcommit_ratio中指定允许过量使用的虚拟空间所占物理内存总量的百分比。默认为50%。可以分配的最大虚拟空间为总物理内存量的150%。

下面介绍overcommit_memory的不同取值对应的不同虚拟空间分配。

OVERCOMMIT_GUESS

overcommit_memory的默认值为OVERCOMMIT_GUESS。指定这个参数时,预测将空闲内存、页面缓存量、空闲交换区量、可回收slab(长字节)量等回收的页面数,虚拟空间要求分配的量比这个数小时,分配成功。

(请注意,在多个进程同时要求大量的虚拟空间时是无法正确预测的。下面所述的OVERCOMMIT_NEVER中就没有这种问题。)

在OVERCOMMIT_GUESS的情况下,可分配的虚拟空间大小基本就是物理内存大小和交换区大小的合计值。物理内存为2GB,交换区为2GB,当前消耗1GB时,还可以分配约3GB的虚拟空间。

OVERCOMMIT_ALWAYS

在OVERCOMMIT_ALWAYS的情况下,虚拟空间分配总是成功。即使对于过大的虚拟空间要求,也会分配虚拟空间。可以在与实际安装的物理内存量完全无关的形态下使用虚拟空间,如前面所述的散列表等。

OVERCOMMIT_NEVER

在OVERCOMMIT_NEVER的情况下,对可分配虚拟空间量的管理更加严格。

首先,记录下整个系统内已分配的虚拟空间量。这个值严格由系统进行集中管理,在分配或释放虚拟空间时重新计算。这个值为/proc/meminfo的Committed_AS。

对于虚拟空间大小的计算也比其他参数严格。例如,在OVERCOMMIT_GUESS的情况下,对mmap系统调用设置了MAP_NORESERVE的虚拟空间量不添加到Committed_AS中。但是,在OVERCOMMIT_NEVER的情况下会添加到Committed_AS中。指定了MAP_NORESERVE的区域也作为可能分配物理内存的虚拟空间处理。

将“所有物理内存量+总交换区量”加上通过/proc/sys/vm/overcommit_ratio指定的比例得到的值,作为可分配的虚拟空间总量。这个值可以使用/proc/meminfo的CommitLimit查看。CommitLimit的值仅在利用OVERCOMMIT_NEVER时有效。在OVERCOMMIT_GUESS、OVERCOMMIT_ALWAYS的情况下,这个项目没有意义。

要求分配虚拟空间时,如果“整个系统中已经分配(Committed_AS)”的虚拟空间量超过“可分配虚拟空间量(CommitLimit)”,则分配失败。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站