Назад | Перейти на главную страницу

Выход HHVM после «Слишком много открытых файлов»

У меня небольшая проблема с HHVM. Итак, я установил HHVM на свой компьютер (Ubuntu 14.04), и он работает без проблем.

Теперь я провел несколько тестов производительности и сделал тест с помощью apache bench. Чтобы получить максимальную нагрузку, я проверил следующие настройки:

ab -n 2000 -c 10 http://example.com/

После запуска теста все ядра ЦП перейдут на 100%, и тест будет запущен. Через несколько секунд он убивает все процессы HHVM и отключается, и я получаю следующие сообщения в журнале HHVM:

\nWarning: Too many open files in /var/www/xxx/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php on line 736
Finished singleJitRequest 1
Finished singleJitRequest 2
Finished singleJitRequest 3
Finished singleJitRequest 4
Finished singleJitRequest 5
\nWarning: Too many open files in /var/www/xxx/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php on line 736
\nFatal error: Class undefined: Doctrine\\DBAL\\Driver\\PDOException in /var/www/xxx/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 47
\nWarning: Too many open files in /var/www/xxx/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php on line 736

Итак, он работает в ограниченном количестве открытых файлов, и я не знаю почему. Это обычная установка HHVM + Nginx со всеми настройками по умолчанию.

Кто-нибудь знает, как решить эту проблему, или раньше у вас была такая же проблема?

Редактировать: Я использую порт 9000, а не сокет unix.

Какое максимальное количество дескрипторов открытого файла установлено?

Наверное, слишком мало, может, 1024?

Получите PID вашего запущенного процесса HHVM и проверьте:

grep "open files" /proc/$pid/limits

Чтобы отрегулировать это, вы устанавливаете свои ограничения в /etc/security/limits.conf.

У вас также есть ограничение файлового дескриптора для всего ядра, расположенное в sysctl fs.file-max, но я бы не стал беспокоиться об этом сейчас, это не повлияет на это.