Linux 2.4以降では、デフォルトの仮想メモリの動作はPostgreSQLには最適ではありません。カーネルがメモリオーバーコミットを実装する方法のため、カーネルは、他のプロセスに依存するメモリがシステムの仮想メモリを枯渇させた場合、PostgreSQL(postmasterプロセス)を終了させる可能性があります。
これが発生した場合、以下のようなカーネルメッセージが現れます(こうしたメッセージを検索する場所についてはシステム文書と設定を参照してください)。
Out of Memory: Killed process 12345 (postmaster).
これは、postmasterプロセスがメモリ不足のために終了してしまったことを示します。起動中のデータベース接続は正常に動作しますが、新しい接続は受け付けられません。復旧するには、PostgreSQLを再起動しなければなりません。
この問題を防止する1つの方法として、PostgreSQLを他のプロセスがそのマシンのメモリを枯渇させないことが確実なマシンで起動するというものがあります。
Linux 2.6以降では、メモリを"オーバーコミット"させないようにカーネルの動作を変更するという、より優れた解法があります。これは、以下のようにsysctlを使用して厳密なオーバーコミットモードを選択すること、もしくは、/etc/sysctl.confに同等の項目を記述することで実施されます。
sysctl -w vm.overcommit_memory=2
また、関連するvm.overcommit_ratio設定を変更した方が良いでしょう。詳細はDocumentation/vm/overcommit-accountingカーネル文書を参照してください。
Linux 2.4カーネルのベンダの中には、2.6のオーバーコミットsysctl版を持つものがあることが報告されています。しかし、関係するコードを持たないカーネルでvm.overcommit_memoryを2に設定することはより状況を悪化させます。 2.4のインストレーションではこれを試す前に、実際のカーネルソースコードを調査し、その中でサポートしているかどうかを検証することをお勧めします(mm/mmap.cファイル内のvm_enough_memory関数を参照してください)。 overcommit-accounting文書ファイルの存在は、この機能が存在するかどうかを証明するものではありません。疑わしい場合は、使用中のカーネルベンダのカーネル専門家に相談してください。