Я пытаюсь протестировать приложение сетевого сервиса, которое допускает большое количество одновременных соединений сокетов.
Я настроил /etc/sysctl.conf
со следующим:
kern.maxfiles=65536
kern.maxfilesperproc=65536
kern.ipc.somaxconn=10000
С этим на месте, ulimit -n
показывает, что у меня максимум 65536 "открытых файлов". Все же мой сервис все еще застревает вокруг 1000-го соединения.
Думая, что, возможно, это что-то особенное для платформы (Node), я повторно реализовал упрощенную версию этого в Golang, но у него есть та же проблема.
Это также происходит, если я разделю сторону «клиента» на несколько процедур, каждый из которых открывает несколько соединений. Сервис всегда застревает вокруг 1000-го соединения.
lsof -p <pid>
показывает 1011 соединений IPv6 примерно так:
gochat 25034 username 178u IPv6 0x11c1273e19ee5c8f 0t0 TCP localhost:http-alt->localhost:50080 (ESTABLISHED)
Что навязывает этот максимальный предел сокетного соединения и как его расширить?
Ответы:
Вот и получается, что Go библиотека socketio имеет максимальную настройку по умолчанию 1000 одновременных соединений сокетов. призвание
server.SetMaxConnection(10000)
(в сочетании с соответственно высокимulimit -n
как уже упоминалось в вопросе) позволит & gt; 1000 одновременных клиентских подключений.источник