Как увеличить ограничения на сокеты на osx для тестирования нагрузки?

Я создаю тестер нагрузки, который использует libev для создания множества открытых подключений tcp к приложению, над которым я работаю. В настоящее время он бомбит 256 соединений из-за предела nofiles:

ulimit -n
256

Я могу увеличить это до 1024, выполнив следующее:

ulimit -n 1024

Но я не могу увеличить его дальше. В идеале я хочу установить его на 1048576. Он дает следующую ошибку:

ulimit: open files: cannot modify limit: Invalid argument

Как я могу увеличить ulimit дальше на osx?

Ответ 1

(ответ обновлен, чтобы использовать -S, как было предложено несколькими комментаторами)

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

Ответ 2

Попробуйте запустить как root (например, выполните "sudo -s" перед запуском команды ulimit и вашей программы).

Обратите внимание, что я не уверен, что одномиллионные TCP-сокеты сразу реалистично достижимы (хотя мне интересно узнать о том, что происходит, когда вы пытаетесь это сделать, ^))

Кроме того, ознакомьтесь с этим.

Ответ 3

Еще одно: ограничение по портам - 65535. Таким образом, вы можете не получить столько, сколько хотите.