Увеличение лимита исходящих TCP-соединений на MacOS - PullRequest
3 голосов
/ 27 марта 2019

Краткая версия вопроса: Как настроить \ настроить параметры 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 можно настроить также.

...