web-dev-qa-db-ja.com

開いているファイルが多すぎてストリームを開くことができませんでした-php1024の最大制限-Redhat-なぜ新しい制限が機能しないのですか?

PHPプログラムの問題をデバッグしているときに、このメッセージが表示されます。

  • /etc/security/limits.confを編集して、追加しました
 * hard nofile 500000 
 * soft nofile 500000 
 root hard nofile 500000 
 root soft nofile 500000 

ここで説明されているように( https://rtcamp.com/tutorials/linux/increase-open-files-limit/ )。その後、入力します

ulimit -Hn

そして

ulimit -Sn

新しい制限500000を明らかにします。

  • 私はすでに/ etc/pam.d/common-sessionファイルを編集し、行を追加しました
セッションに必要なpam_limits.so 
  • その後、システムを再起動しました。私のプログラムは、ファイル#1025を開こうとすると、例外をスローし続けます。

  • PhpプロセスPID(27263)を取得してから、cat/proc/27263/limitsを実行しました

 
ソフト制限ハード制限単位の制限
最大cpu時間無制限無制限秒
最大ファイルサイズ無制限無制限バイト
最大データサイズ無制限無制限バイト[.____。 .____。]最大スタックサイズ10485760無制限バイト
最大コアファイルサイズ0無制限バイト
最大常駐セット無制限無制限バイト
最大プロセス9512495124プロセス
最大オープンファイル10244096ファイル
最大ロックメモリ6553665536バイト
最大アドレススペース無制限無制限バイト
最大ファイルロック無制限無制限ロック
最大pe nding signal 95124 95124 signal 
 Max msgqueue size 819200 819200 bytes 
 Max Nice priority 0 0 
 Max realtime priority 0 0 
 Max realtime timeout無制限無制限us 
 

ご覧のとおり、これらのシステム全体の構成を設定した後でも、PHPプロセスには1024の最大オープンファイル制限があります。

なぜ??どうすれば変更できますか?この特定のケースでシステム全体の設定が機能しないのはなぜですか?

ありがとうございました

3
glfabro

短い答え(500000の制限の場合)

  1. /etc/security/limits.confを編集して、これをファイルの最後に追加します。
 * hard nofile 500000 
 * soft nofile 500000 
 root hard nofile 500000 
 root soft nofile 500000 
  1. ファイル/ etc/sysconfig/httpdを編集し、最後に追加します。
 ulimit -n 500000 
  1. 再起動(絶対に必要かどうかわからない)

  2. ビンゴ!

長い答え

limitsをstart-stop-daemonで動作させる および このRed Hatメーリングリストのディスカッション によると、

limits.conf(5)は、pam_limits(8)の構成であり、/ etc /pam.dの構成に従ってPAMスタックによってアクティブ化されます。ただし、init.dスクリプトから起動されたstart-stop-daemon(8)はPAMスタックを通過しないため、これらの種類の設定が適用されることはありません。

または簡単に言えば、

/etc/security/limits.confはログインに適用され、ユーザー「Apache」はログインしていません。

最初のリンクで提案されている解決策は、init.dスクリプトを編集し、スクリプトの最後にulimit-nを追加することです。

ただし、2番目のリンクで確認できるように、/ etc/init.d/httpdスクリプトを編集すると、システムの更新によってファイルが上書きされ、変更が失われる可能性があります。

そのため、代わりに/ etc/sysconfig/httpdファイルを編集してそこにコマンドを入力するように ここここ および ここ を提案しました。

それが私がしたことであり、今私は美しい猫/ proc/pid/limitsを思い通りに手に入れました:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             500000               500000               processes
Max open files            500000               500000               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       95124                95124                signals
Max msgqueue size         819200               819200               bytes
Max Nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

プログラムがクラッシュしなくなりました。

ちなみに、システムはRHEL Server6.6です。

3
glfabro