私が持っています /etc/security/limits.conf
次のように設定します。
nobody soft nofile 409600
nobody hard nofile 1024000
phpuser soft nofile 409600
phpuser hard nofile 1024000
httpd soft nofile 409600
httpd hard nofile 1024000
* soft nofile 409600
* hard nofile 1024000
ただし、phpページは引き続き表示されます。
[...] failed to open stream: Too many open files [...]
設定ulimit -n 10000
は一時的な修正にすぎないようです。
私はまた次のセットを持っています:
fs.file-max = 20970800
net.core.somaxconn = 1024000
kern.maxfilesperproc = 16638400
kern.maxfiles = 819200
2つの潜在的な問題があります。
phpuser
は、PAMを使用して「ログイン」しない可能性があるため、新しい制限を無視する可能性があるため、/etc/security/limits.conf
は適用されません。詳細については、 この回答 を参照してください。
ユーザープロセスの制限を変更しています。 カーネルには、開いているファイルハンドルの数にもシステム全体の制限があります。
これはあなたの問題かもしれません。次のように値を確認できます。
$ sysctl fs.file-max
$ sysctl fs.file-nr
デフォルト 、file-maxは、kBで使用可能なシステムメモリの10%である必要があります。数:4 GB RAM 〜400000ファイル。これは設定しようとしている制限を下回っています。
ドキュメント は言う:
File-nrの3つの値は、割り当てられたファイルハンドルの数、割り当てられたが未使用のファイルハンドルの数、およびファイルハンドルの最大数を示します。 Linux 2.6は、空きファイルハンドルの数として常に0を報告します。これはエラーではなく、割り当てられたファイルハンドルの数が、使用されているファイルハンドルの数と正確に一致することを意味します。
Limits.confを編集することでulimitを永続的に設定できます。このリンクを確認してください
PHPファイルの場合は、このスレッドも参照してください
https://stackoverflow.com/questions/15937515/failed-to-open-stream-too-many-open-files