Javaアプリケーション上のUbuntu 14.04サーバーで、PostgresのToo many Open filesエラーが発生しています(Postgresql 9.5を使用)。
/etc/security/limits.confに以下を設定します
* soft nofile 16384
* hard nofile 16384
root soft nofile 16384
root hard nofile 16384
postgres soft nofile 16384
postgres hard nofile 16384
/etc/sysctl.confにも以下を設定します
kern.maxfiles=20480
kern.maxfilesperproc=18000
また、Postgresユーザーとして実行中に次の結果を確認してください。
-> ulimit -Hn
16384
-> ulimit -Sn
16384
-> cat /proc/sys/fs/file-max
100268
サーバーを再起動して、Postgresのulimitの100268を確認した後。ただし、postgresプロセスで開いているファイルの制限を確認している間は、1024と4096のままです。
# cat /proc/1072/limits
Max open files 1024 4096 files
Postgresサービスを再起動すると、次のように変更されました
#cat /proc/1759/limits
Max open files 16384 16384 files
しかし、まだ "Too many Open files"エラーが発生しているため、影響はないようです。
また、サーバーのディレクトリ/etc/security/limits.d/および/etc/security/conf.d/は空です。だから誰でも私を案内してください。
@dilyin更新ありがとうございます。
PostgreSQLの起動スクリプトのulimit値を更新しましたが、まだ問題がありました。
最後に、max_files_per_process
からデフォルトの1000まで200。このパラメーターはpostgresql.conf
ファイル。これは、各サーバーサブプロセスに許可される同時に開くファイルの最大数を設定します。
あ...既知の問題。
通常、人々は「/etc/security/limits.conf」ファイルの編集を開始しますが、このファイルは、pamシステムを介してアクティブにログインしているユーザーにのみ適用されることを忘れてください。
Initスクリプトを使用してデータベースを手動で起動した場合、データベースプロセスは変更された制限を継承しますが、データベースが起動時に起動された場合、またはsystemdなどによって起動された場合は、継承されません。
Debianの場合は「/ etc/defaults/$ service」、RedHatの場合は「/ etc/sysconfig/$ service」ファイルがあります。これらのファイルは、デーモンが実行される前にinitスクリプトによって供給されます。追加 ulimit -s unlimited
またはこのようなものをこれらのファイルに挿入します。制限はinitスクリプトシェルで適用され、データベースプロセスに影響します。
カーネルmaxfilesも設定する必要があります。