解決策 1:
ここで別の質問に答えました:
Git が「メモリ不足」というエラーでプッシュに失敗する
ここですべての質問に答えるわけではありませんが、タイトルの質問:
<ブロック引用>shmall、shmmax、shmmni などの設定方法 … 一般および postgresql の場合
一部のカーネル ディストリビューションでは、カーネルが最大メモリを単一のプロセスに割り当てないようにする設定があります:
カーネル パラメータの設定
/etc/sysctl.conf
を変更します ファイルに、オペレーティング システムに適した行を含めます:
# Red Hat Enterprise Linux 3.0 and CentOS 3.x
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmin = 1
kernel.shmseg = 10
# semaphores:
semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128
fs.file-max = 65536
# Red Hat Enterprise Linux 4.0 and CentOS 4.x
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
プロセスが制限を超えると、システムで使用可能な最大メモリが報告されていても、カーネルはプロセスを強制終了します。
注:これらの設定には注意してください。この例の設定は、私たちの環境のサーバーから取得したため、おそらく使用したくないでしょう。
言及するいくつかの追加のメモ:
sysctl でカーネル設定を更新およびテストするには、次のコマンドを使用します:
現在の設定を一覧表示:
sysctl -A | grep shm
sysctl -w kernel.shmmax=<value> to write in sysctl.conf
sysctl -p /etc/sysctl.conf to read/reload the values from sysctl.conf
/etc/selinux/config
を編集して、セキュア Linux を無効にします。 ファイルで、SELINUX フラグが次のように設定されていることを確認してください。
SELINUX=disabled
<ブロック引用> これは適切ですか?そうでない場合 (または必ずしもそうとは限りません)、どの場合に適切ですか?
通常、カーネル設定は、ISP プロバイダーが単一の顧客プロセスが共有サーバー上のすべてのリソースを占有することを望まない場合、データセンター環境でより厳密に定義されます。
リソース不足のためにカーネルによって強制終了されるプロセスがない限り、通常はカーネル メモリ パラメータを設定する必要はありません。
場合によっては、postgres は、共有 mememory で利用可能なものよりも多くの mem を特定のページ サイズに割り当てることもできます:
* The PostgreSQL server failed to start. Please check the log output:
2011-11-04 05:06:26 UTC FATAL: could not create shared memory segment: Invalid
argument
2011-11-04 05:06:26 UTC DETAIL: Failed system call was shmget(key=5432001, size
=161849344, 03600).
2011-11-04 05:06:26 UTC HINT: This error usually means that PostgreSQL’s reques
t for a shared memory segment exceeded your kernel’s SHMMAX parameter. You can
either reduce the request size or reconfigure the kernel with larger SHMMAX. To
reduce the request size (currently 161849344 bytes), reduce PostgreSQL’s shared
_buffers parameter (currently 19200) and/or its max_connections parameter (curre
ntly 53).
If the request size is already small, it’s possible that it is less than
your kernel’s SHMMIN parameter, in which case raising the request size or recon
figuring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memo
ry configuration.
…fail!
上記の例のようなエラーは、カーネル リソースの設定を調整することで解決できます。リソース設定を決定するための推奨設定と方法については、こちらで詳しく説明しています:
http://www.postgresql.org/docs/9.1/static/kernel-resources.html
ただし、postgres プロセスに関連するリソース不足の状況に遭遇しない限り、これらの設定に実際に触れる必要はありません。これらの状況は、ほとんどの場合、リソースがほとんど割り当てられていない共有環境またはサーバーで発生します。
<ブロック引用>ゼロから実際に設定する方法を誰か説明できますか?
Postgres のチューニングについては、こちらをお読みください:
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
解決策 2:
ああ!!postgresql サーバーの最適メモリ構成を計算する素晴らしいツールをここで見つけました。
http://pgtune.leopard.in.ua/