PostgreSQLとOOM Killer:厳格なメモリオーバーコミットが必要な理由
PostgreSQLはメモリ管理においてOOM Killerによる強制終了のリスクに直面することがある。本記事では、Linuxカーネルのメモリオーバーコミットの仕組みと、PostgreSQLの安定稼働のためにstrict(厳格)モードでのオーバーコミット設定が不可欠である理由を解説する。適切な設定により、メモリ不足時のプロセス強制終了を防ぎ、データベースの信頼性を向上させる方法を紹介する。
背景メモ
- この記事は、PostgreSQL(オープンソースのリレーショナルデータベース)がLinuxカーネルのOOM Killer(Out-Of-Memory Killer。メモリ不足時にシステムが強制的にプロセスを殺す仕組み)に誤って強制終了される問題と、その対策を扱っている。
- 中心人物はUbicloud(ユビクラウド)。PostgreSQLに最適化したクラウドサービスを提供する企業で、創業者は元GitHubのエンジニア。既存の大手クラウド(AWS, GCP, Azure)より低価格を謳う。
- 問題の核心はLinuxのメモリオーバーコミット(プロセスに約束した以上のメモリを物理的に割り当てる動作)。デフォルトでは「ヒューリスティック」モードだが、PostgreSQLは子プロセス(ワーカー)が大量のメモリを一度に確保する設計のため、このモードだとOOM Killerに狙われやすい。
- 著者は、Linuxカーネルの起動パラメータ「vm.overcommit_memory=2」(常に厳密なオーバーコミット制限)を推奨。これでPostgreSQLのメモリ使用量を予測可能にし、不意の強制終了を防げるとする。
- この問題はPostgreSQLに限らず、メモリを多量に使うアプリケーション全般に当てはまる背景がある。