您的位置:首页 > 其它

about overcommit_memory

2014-08-22 13:03 357 查看
Since 2.1.27 there are a sysctl 
VM_OVERCOMMIT_MEMORY
 and
proc file 
/proc/sys/vm/overcommit_memory
 with
values 1: do overcommit, and 0 (default): don't. Unfortunately, this does not allow you to tell the kernel to be more careful, it only allows you to tell the kernel to be less careful. With 
overcommit_memory
 set
to 1 every 
malloc()
 will
succeed. When set to 0 the old heuristics are used, the kernel still overcommits.


Going in the right direction

Since 2.5.30 the values are: 0 (default): as before: guess about how much overcommitment is reasonable, 1: never refuse any 
malloc()
,
2: be precise about the overcommit - never commit a virtual address space larger than swap space plus a fraction 
overcommit_ratio
 of
the physical memory. Here 
/proc/sys/vm/overcommit_ratio
 (by
default 50) is another user-settable parameter. It is possible to set 
overcommit_ratio
to
values larger than 100. (See also 
Documentation/vm/overcommit-accounting
.)

After

1

# echo
2 > /proc/sys/vm/overcommit_memory

all three demo programs were able to obtain 498 MiB on this 2.6.8.1 machine (256 MiB, 539 MiB swap, lots of other active processes), very satisfactory.

 

However, without swap, no more processes could be started - already more than half of the memory was committed. After

1

# echo
80 > /proc/sys/vm/overcommit_ratio

all three demo programs were able to obtain 34 MiB. (Exercise: solve two equations with two unknowns and conclude that main memory was 250 MiB, and the other processes took 166 MiB.)

 

One can view the currently committed amount of memory in 
/proc/meminfo
,
in the field 
Committed_AS
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: