не удалось открыть поток слишком много открытых файлов-php 1024 максимальный лимит-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 required pam_limits.so
  • я перезагрузил систему. Моя программа продолжает выдавать исключение при попытке открыть файл #1025.

  • я получил php process 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 Макс открытых файлов предел.

почему?? Как я могу это изменить? Почему Системные настройки не работают для этого конкретного случая?

спасибо

5
задан Koen.
источник

1 ответов

короткий ответ (для лимита 500000)

  1. изменить /etc/security / limits.conf и добавьте это в конец файла:
*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000
  1. отредактируйте файл / etc/sysconfig / httpd и добавьте в конце add:
ulimit -n 500000
  1. перезагрузка (не знаю, если это абсолютно необходимо)

  2. Бинго!

ответ

оказывается, что, согласно заставить ulimits работать с start-stop-daemon и это Red Hat список рассылки обсуждение,

ограничения.conf (5) - это конфигурация для pam_limits (8), которая активированный стеком пам по конфигурации в / etc / pam.d. Однако Start-stop-daemon (8)запускается из инициализации.д скрипт не проходит через стек PAM, поэтому такие настройки никогда не применяются.

или, проще говоря,

/etc/security / limits.conf применяется к логинам, а пользователь "apache" - нет вход в систему.

решение, предложенное в первой ссылке, заключается в редактировании init.D сценарий и добавьте ulimit-n в конец сценария.

однако, как видно из второй ссылки, если вы редактируете /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 Server 6.6.

2
отвечен glfabro 2017-03-20 10:17:51
источник

Другие вопросы apache-http-server linux php redhat-enterprise-linux