PostgreSQLとOOM Killer:なぜStrict Memory Overcommitを使用する必要があるのか
PostgreSQL and the OOM Killer: Why You Must Use Strict Memory Overcommit
この記事では、PostgreSQLサービスをOOM(Out Of Memory)キルから保護するために、LinuxカーネルのStrict Memory Overcommit設定がどのように役立つかを解説しています。通常、Linuxカーネルはプロセスが確保した仮想メモリよりも少ない物理メモリしか割り当てませんが、メモリ使用量が物理メモリを超えるとOOM Killerが起動し、プロセスを強制終了させます。PostgreSQLの場合、OOM Killerがバックエンドプロセスを終了させると、共有メモリ領域が破損し、データ破損や全接続の切断、クラッシュリカバリによる長時間のダウンタイムを引き起こす可能性があります。Strict Memory Overcommitを有効にすると、メモリ割り当て時に物理メモリを超過した場合、OOM Killerが起動する代わりにENOMEMエラーが返され、PostgreSQLはこれを検知してトランザクションをキャンセルし、バックエンドプロセスを終了させることで、システム全体のダウンタイムを防ぎます。しかし、Linuxカーネル6.5.0から6.8.0の間には、メモリ計上に関するバグが存在し、Committed_ASの値が実際よりも大幅に増加し、Strict Memory Overcommitが意図せず失敗する原因となっていました。このバグは、メモリ再マッピング時のエラーチェックの誤りに起因し、Linus Torvaldsによって修正されました。著者は、Strict Memory Overcommitの設定値として、物理メモリの80%に加えて2GBを確保するヒューリスティックを推奨しています。これは、カーネルデータ構造やGo言語のサイドカープロセスなどが使用するメモリを考慮したものです。
本記事はPostgreSQLとLinuxカーネルのOOM Killer挙動に関する技術詳細を解説しているが、特定の企業業績や新製品発表、市場価格の変動、規制変更など投資判断に直結する具体的な事象は含まれていない。Linuxカーネル6.5.0〜6.8.0のバグとその修正は技術者向け情報であり、スタートアップの資金調達や上場、業績発表など投資家がアクションを起こす根拠となる材料ではない。そのため投資家向けの注目点は存在しない。