Максимальное количество Erlang одновременных открытых портов?

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 + соединения одновременно для тестирования параллелизма Отклонений от курса?

Спасибо.

9
задан ckovacs 25 January 2010 в 03:00
поделиться

3 ответа

Опробовав все предложения и изучив документацию Erlang, я пришел к выводу, что моя проблема в том, что Yaws не может справиться с нагрузкой.

На том же компьютере веб-сервер Apache Http Components (неблокирующий ввод-вывод) не имеет тех же проблем с обработкой соединений с одинаковыми пороговыми значениями.

Спасибо за вашу помощь. Я собираюсь перейти к другим веб-серверам на основе Erlang, таким как Mochiweb.

0
ответ дан 4 December 2019 в 21:49
поделиться

Похоже, вы попали в системные ограничения, попробуйте увеличить максимальное количество открытых файлов, используя

$ ulimit -n 500

Python на Snow Leopard, как открыть> 255 розеток?

Сам Erlang имеет ограничение 1024:

Из http://www.erlang.org/doc/man/erlang.html

Максимальное количество портов, которые могут быть открыты одновременно, составляет 1024 по умолчанию, но можно настроить переменную среды Erl_max_ports.

Редактировать:

Системный вызов Прослушать () Имеет параметр Backlog, который определяет, сколько запросов можно показывать, пожалуйста, проверьте, помогает ли задержка между запросами для установления соединений. Это может быть ваша проблема.

6
ответ дан 4 December 2019 в 21:49
поделиться

Все системные пределы ERLANG сообщаются в руководстве эффективности ERLANG:

http: // erlang. org / doc / contace_guide / ustvather.html # ID2265856

Считывание из разных портов Раздел :

Максимальное количество одновременно Открытые порты Erlang по умолчанию по умолчанию 1024. Этот предел может быть поднят до максимума 268435456 при запуске (см. Окружающую среду Переменная ERL_MAX_PORTS в Erlang (3)) Максимальный лимит 268435456 открыт Порты по крайней мере на 32-битном архитектура не может быть добраться до из-за нехватки памяти.

3
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: