erlang библиотека TCP/IP имеет некоторые ограничения? Я сделал некоторый поиск, но не могу найти категорические ответы.
Я установил переменную среды ERL_MAX_PORTS на 12 000 и настроил Отклонения от курса для использования неограниченных соединений.
Я записал простое клиентское приложение, которое соединяется с appmod, который я записал для Отклонений от курса, и тестирую количество одновременных соединений запуском X числа клиентов все одновременно.
Я нахожу, что, когда я добираюсь приблизительно до 100 клиентов, сервер Отклонений от курса прекращает принимать больше соединений TCP и клиентские ошибки с
Error in process with exit value: {{badmatch,{error,socket_closed_remotely}}
Я знаю, что должен быть предел количеству открытых одновременных соединений, но 100 кажется действительно низким. Я просмотрел всю документацию отклонений от курса и удалил любой предел на соединения.
Это находится на iMac Core 2 Duo Intel на 2.16 ГГц рабочий Snow Leopard.
Быстрый тест на Машине Vista показывает, что я получаю те же проблемы при приблизительно 300 соединениях.
Действительно ли мой тест неблагоразумен? Т.е. действительно ли глупо открыть 100 + соединения одновременно для тестирования параллелизма Отклонений от курса?
Спасибо.
Опробовав все предложения и изучив документацию Erlang, я пришел к выводу, что моя проблема в том, что Yaws не может справиться с нагрузкой.
На том же компьютере веб-сервер Apache Http Components (неблокирующий ввод-вывод) не имеет тех же проблем с обработкой соединений с одинаковыми пороговыми значениями.
Спасибо за вашу помощь. Я собираюсь перейти к другим веб-серверам на основе Erlang, таким как Mochiweb.
Похоже, вы попали в системные ограничения, попробуйте увеличить максимальное количество открытых файлов, используя
$ ulimit -n 500
Python на Snow Leopard, как открыть> 255 розеток?
Сам Erlang имеет ограничение 1024:
Из http://www.erlang.org/doc/man/erlang.html
Максимальное количество портов, которые могут быть открыты одновременно, составляет 1024 по умолчанию, но можно настроить переменную среды Erl_max_ports.
Редактировать:
Системный вызов Прослушать () Имеет параметр Backlog, который определяет, сколько запросов можно показывать, пожалуйста, проверьте, помогает ли задержка между запросами для установления соединений. Это может быть ваша проблема.
Все системные пределы ERLANG сообщаются в руководстве эффективности ERLANG:
http: // erlang. org / doc / contace_guide / ustvather.html # ID2265856
Считывание из разных портов Раздел :
Максимальное количество одновременно Открытые порты Erlang по умолчанию по умолчанию 1024. Этот предел может быть поднят до максимума 268435456 при запуске (см. Окружающую среду Переменная ERL_MAX_PORTS в Erlang (3)) Максимальный лимит 268435456 открыт Порты по крайней мере на 32-битном архитектура не может быть добраться до из-за нехватки памяти.