stream_socket_accept(): accept failed: Too many open files

Разработчикам на PHP, кто оценил скорость работы websocket уже не стать прежними. Мы рады скорости работы, рады маленькому трафику между клиентом и сервером.

Но вот не задача, бывают и казусы. Уже дважды сайт SHAREOBJ прекращал работу по причине переполнения лимита одновременно открытых файлов.

GPS socket, который используется на серверной стороне для принятия соединений с различных GPS-трэкеров и устройств Android, внезапно прекращал работу с ошибкой stream_socket_accept(): accept failed: Too many open files in …. путь к библиотеке Ratchet типа <ваш путь>/vendor/react/socket/React/Socket/Server.php

Автор библиотеки Chris Boden рассказывает о том, что проблема выходит за рамки разработки самого PHP-скрипта и относиться к операционной системе. В частности я работаю с Apache и проблему превышения лимита на одновременное открытие файлов, вынужден решать на уровне OS.

NGINX

Если бы у меня стоял NGINX в качестве веб-сервера, то вопрос решался бы так:

в начало  /etc/nginx/nginx.conf добавляем строчку
worker_rlimit_nofile 16384;
и перезагружаем конфигурацию командой:
/etc/init.d/nginx reload

APACHE

Набираем команду ulimit -n, чтобы увидеть какой лимит установлен на одновременное открытие файлов. У меня был установлен 1024.

Прописываем хотя бы в 4 раза больше для начала, чтобы посмотреть как быстро на этот раз сайт достигнет лимита и запускаем команду:

ulimit -n 4096

На этом этапе помогло или нет, сказать точно не могу. Время покажет.