ブログトップ 記事一覧 ログイン 無料ブログ開設

理想未来はどうなった? このページをアンテナに追加 RSSフィード Twitter

2010-10-11

メモリオーバーコミット

Linuxのお話。


多くのプログラムは、使うかどうか分からないけど取り敢えず多めにメモリを確保していることがよくあります。
そういったプログラムが多数動いていると、システム全体のメモリ仕様効率が悪くなってしまいます。


Linuxにはメモリオーバーコミットという機構があり、実メモリ以上のメモリを割り当てることが可能です。
メモリを確保する際には。沢山あるように見せかけておき、実際に使われる段階でメモリを割り当てるようになっています。



メモリオーバーコミットがあると、取り敢えずメモリで失敗することがほぼ無くなります。
mallocの後に確保ができたかどうかチェックしていない様なプログラムでも確保に失敗して例外で落ちるようなことは無いわけです。


実際に実メモリ仮想メモリも足りなくなったときには、OOM Killerという機構が発動します。
カーネルがメモリを十分確保できそうなプロセスを選び、プロセスを強制終了させて空きメモリーを確保します。


OOM Killerが発動すると、終了させられた側のプロセスは意図しない理由で終了されることになります。


いい加減なプログラムを活かして、まともなプログラムも巻き添えで殺してしまうという、なんとも迷惑な機構です。


安定動作の為にはOOM Killerが発動しないように設定したほうがよいでしょう。

OOM Killerの優先順位を変更する

優先順位を-16〜15までの値で書き込みます。低い値ほどOOM Killterの対象となる確率が低くなります。

echo (優先順位) > /proc/(Process ID)/oom_adj


oom_adjを-17にすることでOOM Killerの対象から外すことができます。

echo -17 > /proc/(Process ID)/oom_adj


メモリオーバーコミットを使用しない

vm.overcommit_memoryを2に設定することで、OOM Killerの原因となるメモリオーバーコミットを無効にすることができます。

# sysctl -w vm.overcommit_ratio=99
# sysctl -w vm.overcommit_memory=2

/etc/sysctl.confに記載することで起動時から有効になります。

vm.overcommit_ratio=99
vm.overcommit_memory=2


参考

DSAS開発者の部屋:DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編
kernel:Memory Manage(4) OOM Killer - Simple is Beautiful

関連記事

[Linux]スワップ領域の操作 mkswap / swapon / swapoff
[Linux]ionice -- I/Oスケジューリングクラスおよび優先度を設定/変更する
[Linux]inotail -- パフォーマンスが良いtailコマンド
[Linux]sarコマンドによるリソース使用状況推移の確認
[Linux]Linux メモリ解放のおまじない

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/pcmaster/20101011/p2