やっぱり、ね。

| HOME | 現在のログ | 注意事項 | 過去ログ | 文字検索 | 管理モード |

[355] はじめてみたかも ( 2007/01/10(Wed) 18:37:15  )

せったー
oom-killer が動くのを見てしまった。
見たくないけど...

[355-1] Re:はじめてみたかも (2007/01/11(Thu) 20:23:24  )

せったー
以下、雑談。

要するに問題は、

1. linux カーネルでは malloc が成功した場合、その領域が必ずしも全部使えるとは限らない。というか、"確保しても全部使わないでしょ" みたいなノリがあるようだ。

2. この実装を補填するかたちで、OOM-Killer が実装されているかな?で、malloc でメモリ不足が発生した場合、適当な(かどうかはわからないけど)プロセスを殺してメモリを確保しようとする。これにより、カーネル自体が死んでしまうことを避けようとしている。殺すプロセスは、もっとも最近起動したとか、メモリをいっぱい使っているとかが選択基準。

であり、

解決策として考えられるのは、

1. OOM-killer の対象からプロセスを除外する。
 (# echo -17 > /proc/〈プロセスID〉/oom_adj)
 -> 代わりに犠牲になるプロセスが出る。

2. malloc で楽観的なメモリ確保(over commit)をしないようにする。
 (# echo 99 > /proc/sys/vm/overcommit_ratio
  # echo 2 > /proc/sys/vm/overcommit_memory)
 -> これでダメな場合、元々メモリ不足?

3. 常に、いくらかのメモリを空けておくようにする。
 (# echo キロバイト > /proc/sys/vm/min_free_kbytes
 キロバイトのデフォルト値はメモリの容量によって決まる)
 -> 忙しくなったときに確保が間に合うかは不明。

以下根拠無し。

・てきとうな容量のRAMディスクを確保して、そこを swap 領域として使うなどすると、瞬間的なメモリ不足は回避できるかもしれない。

もしこれで駄目なら、malloc(もしくは変数宣言) を初期化段階で行ってしまい、動的に確保するのをやめる。
とか?

[戻る]

このフォームから返信してください  ( *の項目は必ず入力してください )
*お名前:
*タイトル:
E-mail:
URL:
*本文:
アイコン:
文字色:
パスワード:  (このパスワードで記事を削除できます)
| HOME | 現在のログ | 注意事項 | 過去ログ | 文字検索 | 管理モード |