web-dev-qa-db-ja.com

LinuxでPHPのulimitを正しく設定する

私が持っています /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
5
Jason

2つの潜在的な問題があります。

あなたの制限はphpuserには適用されないかもしれません

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を報告します。これはエラーではなく、割り当てられたファイルハンドルの数が、使用されているファイルハンドルの数と正確に一致することを意味します。

3
Totor

Limits.confを編集することでulimitを永続的に設定できます。このリンクを確認してください

http://singztechmusings.wordpress.com/2011/07/11/ulimit-how-to-permanently-set-kernel-limits-in-linux/

PHPファイルの場合は、このスレッドも参照してください

https://stackoverflow.com/questions/15937515/failed-to-open-stream-too-many-open-files

0
ganeshredcobra