LINEで送る
Pocket

Hello!!! Adachinです。

最近お酒飲んでます。飲まなくなると酔ってしょうがないですが、

段々と強くなってきました。

今回はKernelの部分!

友人とOOM Killerのお話で盛り上がったのでブログします。


■OOM Killerとは

そもそもなんの略なのか。(Out Of Memory Killer)です!

システムが実メモリーと仮想メモリー空間(スワップ領域)を使い切り、

必要なメモリー領域を新たに確保できない場合に、プロセスを強制終了させて空きメモリーを確保するKernelの仕組み。

さらに!

空きメモリーが確保できないことでシステム自体が停止するという最悪の事態を避けるために用意されている。


■OOM Killerのチューニング

そうならないためにOOMさんの頻度を下げる必要があります。

サイトによって様々ですので、参考になるものをまとめてみました。

あと表が表示されなくてごめんなさいw→枠が出なくてキレそう。。。

・容量のチューニング

カーネルパラメータ 設
定
値
 説明
vm.overcommit_memory 0デフォルト設定。カーネルがメモリの空き容量を概算し、明らかに無効な要求を失敗させることで、ヒューリスティックなメモリオーバーコミット処理を実行します。
残念ながら、メモリは厳密なアルゴリズムではなくヒューリスティックなアルゴリズムを使用して割り当てられるため、この設定でシステム上のメモリの空き容量がオーバーロードとなる場合があります。
 1カーネルはメモリオーバーコミット処理を行いません。
この設定では、メモリのオーバーロードの可能性が高くなりますが、メモリ集約型のタスクのパフォーマンスも向上します。
 2利用可能なスワップと overcommit_ratio で指定されている物理 RAM の割合の合計とメモリが同等もしくはそれよりも大きい場合の要求を拒否します。メモリのオーバーコミットのリスクを減らしたい場合は、この設定が最適です。
overcommit_ratio(0~100?)overcommit_memory が 2 に設定されている場合に考慮される物理 RAM の割合を指定します。
デフォルト値は 50 です。

・kernel/システムパラメタより

カーネルパラメータ 設  定  値   説明
vm.overcommit_memory 2Linuxでは、mallocによりメモリを確保する時に、実際の要求より多めにメモリを確保しよう(オーバーコミット)とする。更に悪いことに、mallocが成功を返しても、実際にメモリを確保できてないことがあり、その場合、既にその領域は使用されているため、kernelにより強制終了となる。
その解決法として、Linux 2.6以降でのみ、メモリをオーバーコミットさせないようにすることが可能。この時、malloc量の上限は、vm.overcommit_ratioにて指定する。
vm.overcommit_ratio nmallocにより確保するメモリ量の上限(n%)。malloc_limit[MB] = swapサイズ[MB] + (物理メモリ量[MB] * overcommit_ratio / 100)

・Linuxオーバーコミットより

vm.overcommit_memory 0オーバーコミット有効。
一回の malloc で確保できるのは実際に利用可能なメモリの大きさまで
1どんなときでもオーバーコミット可
一回の malloc で実際に利用可能なメモリを越える大きさでも確保可能
2オーバーコミット無効
malloc で割り当てられるメモリの総量は (スワップの大きさ)+(物理メモリの大きさ)* vm.overcommit_ratio / 100

■設定方法

・例


■OOM Killerの対象から除外


■ちなみにオーバーコミットとは

mallocによりメモリを確保する場合、実際の要求より多めにメモリを確保しよう(オーバーコミット)とする。


■まとめ

そんな感じで去年勉強しましたが、

チューニングはむずい。。。

あとはちゃんと原因の切り分けができるかが大事ですね。

LINEで送る
Pocket

カテゴリー: BlogCentOSKernelUbuntu障害対応

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズでの副業、ansibleでのインフラコード化を推進し、未経験によるエンジニアのMENTAなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなし中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。