Недавно я обновился до OSX Mavericks, и с тех пор я начал получать вышеупомянутую ошибку на моей машине разработки. В коде нет очевидной проблемы (это приложение, созданное автоматически с использованием Yii ). Что произошло в рамках обновления до Mavericks:
С тех пор я получаю эту проблему после загрузки и перезагрузки веб-сайта несколько раз. После возникновения этой ошибки мой веб-сервер продолжает возвращать ту же ошибку для любого другого приложения, размещенного на localhost. Я должен упомянуть, что статические веб-страницы подаются в порядке.
Я видел несколько тем по этой теме. Большинство из них указывает на проблемы с кодом, где дескрипторы файлов закрываются неправильно, тем самым преодолевая порог ограничения открытого файла. Я также нашел этот поток, который, кажется, предполагает, что это может быть проблемой отладчика zend. Также есть отчет об ошибке для php 5.2.x. После этой темы я попробовал следующее:
$ ulimit -a
который сообщает:
open files (-n) 256
Также,
sysctl -a | grep files
возвращается,
kern.maxfiles = 12288 kern.maxfilesperproc = 10240 kern.maxfiles: 12288 kern.maxfilesperproc: 10240 kern.num_files: 3248
Другой интересный поток предполагает повысить этот предел (в настоящее время 256), используя:
ulimit -n 1024
Я пробовал все, но ничего не работает. Проблема также не всегда воспроизводима.
Мне интересно, что использование ulimit -n 1024
повлияет на apache, поскольку из того, что я прочитал, это влияет на количество файлов, которые могут открывать оболочки.
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ:
apache
помогает немного, пока ошибка не встретится снова. Бесстыдно украден из http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X
Чтобы проверить текущие ограничения в вашей системе Mac OS X, запустите:
$ launchctl limit maxfiles
Последние два столбца – это мягкие и жесткие ограничения, соответственно.
Чтобы настроить максимальные пределы открытого файла в OS X 10.7 (Lion) или новее, отредактируйте /etc/launchd.conf и увеличьте пределы для обоих значений, если это необходимо.
Например, чтобы установить мягкий предел в 16384 файлов и жесткий предел 32768 файлов, выполните следующие шаги:
Проверьте текущие пределы:
$ launchctl limit cpu unlimited unlimited filesize unlimited unlimited data unlimited unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 709 1064 maxfiles 10240 10240
Отредактируйте (или создайте) /etc/launchd.conf и увеличьте пределы. Добавьте строки, которые выглядят следующим образом (используя значения, соответствующие вашей среде):
limit maxfiles 16384 32768
Сохраните файл и перезапустите систему, чтобы новые лимиты вступили в силу. После перезапуска проверьте новые лимиты с помощью команды limitctl limit:
$ launchctl limit cpu unlimited unlimited filesize unlimited unlimited data unlimited unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 709 1064 maxfiles 16384 32768
Если вы столкнулись с этой проблемой при запуске Apache, вы можете настроить apache для увеличения лимита:
$ sudo vi /usr/sbin/apachectl
locate: ULIMIT_MAX_FILES=""
и измените эту строку на что-то вроде:
ULIMIT_MAX_FILES="ulimit 4096"
Затем: sudo apachectl restart
Это не будет работать для сценариев CLI. Но добавление ulimit непосредственно к вашему ~/.bash_profile
(или эквиваленту) должно работать для этой цели.
Это имеет преимущество в том, что вы устанавливаете конкретные лимиты для apache и вашего терминала, не затрагивая другие приложения.
Кроме того, вы должны иметь возможность адаптировать этот метод к другим ОС, заменив ulimit
командой, применимой к этой среде.
Я, вероятно, страдал от информационной перегрузки. Здесь предлагается возможное объяснение, о котором я также упоминал в своем оригинальном посте. Думаю, я пропустил небольшую деталь, где OP упоминает, что он работает на Mac OSX 10.8.x. Я на 10.9, поэтому я загрузил zenddebugger.so со страницы, и все выглядит хорошо. Не получили too many open files
весь день.
Так, возможно, это проблема ZendDebugger.
Я столкнулся с тем же вопросом в El Capitain. Здесь я нашел статью, заслуживающую должного кредита. Выполните следующие действия:
Настройка открытых ограничений файлов Чтобы настроить ограничения открытых файлов на общесистемной основе в Yosemite и выше, вам необходимо создать два файла конфигурации. Первый – это список свойств (aka plist) в /Library/LaunchDaemons/limit.maxfiles.plist, который содержит следующую конфигурацию XML:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>65536</string> <string>65536</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>
Это установит ограничение для открытых файлов на 65536. Второй файл конфигурации plist должен быть сохранен в /Library/LaunchDaemons/limit.maxproc.plist со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxproc</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxproc</string> <string>2048</string> <string>2048</string> </array> <key>RunAtLoad</key> <true /> <key>ServiceIPC</key> <false /> </dict> </plist>
Оба файла plist должны принадлежать root: wheel и иметь разрешения -rw-r-r-. Перезагрузите систему.
Также рекомендуется установить их для сеанса пользователя в .bashrc и добавить:
ulimit -n 65536 ulimit -u 2048
Надеюсь это поможет.
Относительно ответа на исправление отладчика выше. К сожалению, приведенный выше ответ не будет работать для меня, поскольку он применим к версиям PHP версии 5.4, и я должен ограничиться php 5.3.
Zend выпустила версию 6.3 своего сервера, которая поддерживает php в 5.3. Я немного поиграл с установкой (после того, как я удалил свой ulimit обратно по умолчанию Apple), чтобы проверить его и не испытываю никаких проблем. Перед обновлением я не мог отлаживать php без повышения этого предела.
Per http://forums.zend.com/viewtopic.php?t=110823&start=10#p219438 Я думаю, что это действительно была ошибка на сервере Zend, которая была исправлена в 6.2.
Ошибка при запуске xDebug. Обновление решило проблему.
видеть: