なんか、OSの課題で、malloc_test が強制終了されるかかレポー
トに書いて来る奴がいる。そんな風にプログラム組んでないんだ
けどなぁ。
とか思ったら、
http://dsas.blog.klab.org/archives/50706324.html
とかいう話が。Linux は、メモリが足りなくなると、勝手に kill
するのかよ!
Mach 系は、Swap が足りなくなると、メモリをリクエストしたプ
ロセスがsuspendする、のが普通。で、Swap を増やしたり、他の
プロセスを終了させてSwapを空けると、実行が再開されます。Mac
OS X でも、そういう仕様らしい。
そう言われてみると、授業中に実行して「あれ?!」とか思ったこ
とがあったっけ。今年もメモリを使い切るのを実演したら、いき
なり、X Server が止まって、変だと思ったんだよな。なんかが殺
されたんだろうなぁ。
実は知りませんでした~ Mach/Mac OS X 使いだったもので。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
In article <3993504...@leo.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> なんか、OSの課題で、malloc_test が強制終了されるかかレポー
> トに書いて来る奴がいる。そんな風にプログラム組んでないんだ
> けどなぁ。
> http://dsas.blog.klab.org/archives/50706324.html
> とかいう話が。Linux は、メモリが足りなくなると、勝手に kill
> するのかよ!
対策としては、/proc/sys/vm/overcommit_memory を、ほにゃらら
するといいみたいい。
# echo 2 > /proc/sys/vm/overcommit_memory
JF のドキュメントは、これ。
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/sysctl/vm.txt.html
------------------------------------------------------------
overcommit_memory:
このファイルには、メモリ・オーバーコミットを有効にするフラグが含
まれています。
このフラグが 0 の場合、カーネルは、ユーザ空間からメモリ要求があっ
たときに、残っているフリーメモリの量を評価しようとします。
このフラグが 1 の場合、カーネルは、実際にメモリを使い切るまでは
常に十分なメモリがあるかのように振舞います。
このフラグが 2 の場合、カーネルは、どのようなメモリ・オーバー
コミットも許さないように試みる「厳格なオーバーコミット」ポリシー
を使用します。
「もしものときのために」大量のメモリを malloc() するけれども、
それをほとんど使用しないというプログラムがたくさんあるので、
メモリ・オーバーコミットの機能は非常に役に立ちます。
デフォルトの値は 0 です。
詳細情報については、Documentation/vm/overcommit-accounting 及び
security/commoncap.c::cap_vm_enough_memory() を参照してください。
------------------------------------------------------------
しかし、2 は、いいとして、0, 1 の意味がよく分かりません。
ふと検索すると、何年か前の fj にも出てました。
Linux の overcommit までは、覚えていたけれど、プロセスを勝手
に kill するまでは忘れてました。
mmap の MAP_NORESERVE だと、overcommit_memory == 2 でも数え
られないって、何ですかそれ。
http://mkosaki.blog46.fc2.com/blog-entry-280.html
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\