前田です.

MOCHIDA Shuji <mochid@netside.co.jp> writes:

>     http://search.luky.org/fol.2001/msg00337.html
> 
> にありますが、
> 
> | Linux 2.2以降では、/proc/sys/vm/overcommit_memory に1を書き込むと
> | overcommit動作をするようになりますが、デフォルトではovercommitしません。
> 
> とあるように、/proc/sys/vm/overcommit_memory を 1 にしなければいいのかも
> 知れません。
> # またデフォルト変わったんでしょうか?

や,その時にも出ていた話題だと思いますが,2.2.xカーネルでは,fork(2)につい
てはovercommitを完全に止めることはできないのでした.
http://search.luky.org/fol.2001/msg00348.html

2.4.19以降では改善されて,forkもちゃんとチェックされているようです.
また,より厳しくチェックするモードがつきました.

Documentation/vm/overcommit-accountingによると,
0 - Heuristic overcommit handling.  (あからさまなovercommitは拒否.
                                     でも,後で死ぬかも.)
1 - No overcommit handling.  (チェックしない.)
2 - strict overcommit.  (ほとんど全ての場合overcommitしないはず.)
3 - paranoid overcommit. (絶対overcommitしない.ページにアクセスしてプロ
                          セスがkillされたらバグなので報告してください.)
だそうです.

> > 1つ1つのプロセスのリソースが溢れそうになるのを事前に察知
> > する事はできるのでしょうか?
> 
>  overcommit の場合はそれは難しいです。

1つ1つのプロセスのリソースの問題でなく,システム全体の合計の問題なので,
個々のプロセスがローカルに知るのは難しいです.カーネルがチェックしない
と.2.2.xではどうやっても無理です.

>  overcommit なしなら malloc() の時点でエラーになるので、
> "VM: killing process" は出ないですよね?  >  詳しい方

2.2.xでは残念ながら,他のプロセスのせいでメモリが足りなくなって,罪の
ないプロセスが殺されてしまうことは防げません.

2.4.19以降を使って,さらに,確実にするには,
# echo 3 > /proc/sys/vm/overcommit-memory
または,
# /sbin/sysctl -w vm.overcommit-memory=3
として下さい.(スワップ領域は十分に取って下さい.)

                                前田敦司