あまりにも多くの開いているファイルを開くことができませんでした - php 1024最大制限 - Redhat - なぜ新しい制限が効かないのですか?


1

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 ファイルと行を追加しました
session required pam_limits.so
  • その後システムを再起動しました。私のプログラムはファイル#1025を開こうとすると例外をスローし続けます。

  • 私はphpプロセスのPID(27263)を取得してからcat / proc / 27263 / 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             95124                95124                processes
Max open files            1024                 4096                 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

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

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

ありがとうございました

回答:


2

簡単な答え(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. ビンゴ!

長い答え

によると、それが判明 start-stop-daemonでulimitsを機能させる そして このRed Hatメーリングリストでの議論

limits.conf(5)はpam_limits(8)の設定です。   の設定に従ってPAMスタックによってアクティブにされる   /etc/pam.dただし、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サーバー6.6です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.