Краткая версия вопроса: Как настроить \ настроить параметры macOS (Mojave 10.14.3), чтобы разрешить более 10 000 исходящих TCP-соединений на процесс и в общей сложности более 16 000 соединений.
подробности:
Я пытаюсь сделать MacBookPro (16 ГБ ОЗУ, Core i7) пригодным для стресс-тестирования tcp-сервера. Сам сервер размещен на отдельном компьютере, поэтому сейчас речь идет только об исходящих соединениях.
Ниже советы уже обработаны и помогли мне значительно увеличить начальные пределы ОС.
1) Я использовал [launchctl] ( «Слишком много открытых файлов» при выполнении gatling на Mac ), чтобы увеличить лимит maxfiles до 1 млн.
2) Я использовал sysctl для установки \ проверки ограничений kern.maxfiles. На самом деле (насколько я понимаю) это то же самое, что и # 1.
3) Я играл с ulimit . На самом деле я не заметил никакого влияния этого инструмента на мою ОС. Но в любом случае ...
Итак, теперь я MacOS могу установить ~ 10 тыс. Соединений на процесс и 16 тыс. Соединений в системе.
Для простоты мой инструмент просто открывает TCP-соединения в бесконечном цикле и ждет.
try
{
while (true)
{
CreateAndConnectSocket(); //add socket to list
++connectedSockets;
}
}
catch(Exception e)
{
LogWrite("Connected sockets:" + connectedSockets);
LogWrite(e);
WaitForAnyKey();
}
Затем я следую приведенным ниже шагам.
1) Запустить сервер на отдельном ПК.
2) Откройте два терминала на Mac.
3) Выполнить в первом окне терминала:
$ sudo launchctl limit maxfiles 1048576 1048600
$ ulimit -S -n 1048576
4) Убедитесь, что изменения применены в первом терминале:
$ ulimit -S -n
1048576
$ launchctl limit maxfiles
maxfiles 1048576 1048600
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 1048576
$ sysctl kern.maxfiles
kern.maxfiles: 1048600
5) Запустить "ulimit -S -n 1048576" во втором терминале (не уверен, что ulimit вообще нужен.)
6) Убедитесь, что все изменения применены во втором окне терминала (так же, как # 4).
7) Запустите «тестовый клиент» в первом терминале.
8) Запустите «тестовый клиент» во втором терминале.
Результат:
После шага 7 в первом терминале я вижу, что инструмент открыл 10 тыс. Соединений (если быть точным, 10202) и упал за исключением «Слишком много открытых файлов в системе» . Понятия не имею, почему открытые файлы - это проблема с лимитом в 1 миллион.
После шага 8 во втором терминале я вижу, что инструмент открыл 6 тыс. Соединений и упал с исключением «Не удается назначить запрошенный адрес» .
Пока сокеты остаются открытыми (инструменты ждут нажатия клавиши), никакие другие соединения не могут быть созданы в системе - браузеры не могут установить соединения с google.com и т. Д.
И, конечно же, tcp-сервер остается доступным с других компьютеров.
Поскольку мне удалось настроить Windows 10 Home для более высоких номеров подключения, я считаю, что MacOS можно настроить также.