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  2 Linuxでは、mallocによりメモリを確保する時に、実際の要求より多めにメモリを確保しよう(オーバーコミット)とする。更に悪いことに、mallocが成功を返しても、実際にメモリを確保できてないことがあり、その場合、既にその領域は使用されているため、kernelにより強制終了となる。
その解決法として、Linux 2.6以降でのみ、メモリをオーバーコミットさせないようにすることが可能。この時、malloc量の上限は、vm.overcommit_ratioにて指定する。
vm.overcommit_ratio  n mallocにより確保するメモリ量の上限(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によりメモリを確保する場合、実際の要求より多めにメモリを確保しよう(オーバーコミット)とする。


■まとめ

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

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

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



adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

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