web-dev-qa-db-ja.com

PostgreSQLサーバーの起動に失敗しました:共有メモリセグメントの要求がカーネルのSHMMAXパラメータを超えました

PostgreSQLの共有バッファ(他の設定の中でも)を4096Mに増やしましたが、PostgreSQLの起動に失敗し、以下のエラーメッセージが表示されます。

カーネルのSHMMAXパラメータを4096Mに変更する必要がありますか?システムには16GBのRAMが搭載されています。これはどのように行う必要がありますか? SHMALLを何に変更すればよいですか?変更を永続的にし、再起動後も保持したい。

_* Starting PostgreSQL 9.1 database server                                       
* The PostgreSQL server failed to start. Please check the log output:
_

2013-04-15 06:15:53 UTC FATAL: could not create shared memory segment: Invalid argument 2013-04-15 06:15:53 UTC DETAIL: Failed system call was shmget(key=5432001, size=4418322432, 03600). 2013-04-15 06:15:53 UTC HINT: This error usually means that PostgreSQL's request 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 4418322432 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. 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 reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.

無料

_             total       used       free     shared    buffers     cached
Mem:      24744200    1244936   23499264          0      77480     670240
-/+ buffers/cache:     497216   24246984
Swap:     16775160          0   16775160
_
2
Nyxynyx

あなたがあなたを編集したように私には見えますshared_buffersデフォルトから設定で。そして、あなたはたくさんのメモリを持っているので、おそらくカーネルがあなたに許している以上にそれを上げようとしているでしょう。

したがって、次のようなファイルを作成します

/etc/sysctl.d/10-postgresql-shm.conf

次に、その中に次のものを入れます

kernel.shmmax = 4414768

番号をそこに置きたいものに置き換えます。次に、番号を設定するには、次のコマンドを実行します。

Sudo sysctl -p

次に、postgresqlを開始してみてください

2
Mike

PostgreSQLドキュメント から、

最も重要な共有メモリパラメータはSHMMAXで、共有メモリセグメントの最大サイズ(バイト単位)です。 shmgetから「Invalidargument」のようなエラーメッセージが表示された場合は、この制限を超えている可能性があります。 [...] PostgreSQLを2MBという小さなSHMMAXで実行することは可能ですが、許容できるパフォーマンスを得るにはかなり多くのことが必要です。望ましい設定は、数百メガバイトから数ギガバイトです。

ページのさらに下には、Linuxで変更を加える方法の例があります。 8 GBを許可するには:

$ sysctl -w kernel.shmmax=8589934592
$ sysctl -w kernel.shmall=2097152

それが機能する場合は、/etc/sysctl.confを編集して、次回の起動時に設定を有効にすることができます。

選択する値は、マシンを他に何に使用しているかによって異なります。専用のPostgreSQLサーバーの場合は、先に進んで、マシンのメモリのほとんどをPostgreSQLによる共有メモリに使用できるようにします。同じマシンで他のものも実行する場合は、より保守的にすることをお勧めします。

3
200_success