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

имеет ли библиотека Erlang TCP/IP некоторые ограничения? Я провел некоторые поиски, но не могу найти окончательных ответов.

Я установил переменную среды ERL_MAX_PORTS в 12000 и настроил рыскания для использования неограниченных соединений.

Я написал простое клиентское приложение, которое подключается к appmod, который я написал для рысканий, и тестирую количество одновременных соединений с помощью запуска X количество клиентов одновременно.

Я считаю, что когда я получаю около 100 клиентов, сервер Yaws перестает принимать больше TCP-соединений, а клиентские ошибки выходят с

Error in process  with exit value: {{badmatch,{error,socket_closed_remotely}}

Я знаю, что должно быть ограничение на количество открытых одновременно соединений, но 100 кажется очень низким. Я просмотрел всю документацию yaws и удалил любое ограничение на соединения.

Это на 2.16 Ghz Intel Core 2 Duo iMac под управлением Snow Leopard.

быстрый тест на машине Vista показывает, что я получаю то же самое проблемы около 300 соединений.

мой тест неразумно? Т. е. глупо ли открывать 100 + соединений одновременно, чтобы проверить параллелизм рысканий?

спасибо.

3 ответов


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

$ ulimit -n 500

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

сам Эрланг имеет предел 1024:

от http://www.erlang.org/doc/man/erlang.html

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

изменить:

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


все пределы системы Erlang сообщены в руководстве по эффективности Erlang:

http://erlang.org/doc/efficiency_guide/advanced.html#id2265856

чтение открыть порты:

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


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

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

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