【问题标题】:How to increase limits on sockets on osx for load testing?如何增加 osx 上的套接字限制以进行负载测试?
【发布时间】:2011-11-26 13:47:17
【问题描述】:

我正在创建一个负载测试器,它使用 libev 为我正在开发的应用程序创建大量打开的 tcp 连接。由于 nofiles 限制,目前它在 256 个连接处爆炸:

ulimit -n
256

我可以通过执行以下操作将其增加到 1024:

ulimit -n 1024

但我无法进一步增加它。理想情况下,我想将其设置为 1048576。它给出以下错误:

ulimit: open files: cannot modify limit: Invalid argument

如何在 osx 上进一步增加 ulimit?

【问题讨论】:

    标签: macos sockets freebsd libev


    【解决方案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
    

    【讨论】:

    • 奇怪 - 我在我的家庭 mac(雪豹)上试过,但没有用,但在我的工作 mac(也是雪豹)上它工作正常。嗯……
    • 您能详细说明这些设置吗?我假设maxfilesperproc 表示“每个进程”,它必须小于maxfiles 是有道理的,但是您选择该特定数字有什么理由吗?
    • 原始问题提到“理想情况下我想将其设置为 1048576。”。 maxfiles 被选为“略大于 1048576”,没有理由让它成为这个特定值。
    • 我刚刚发现这篇文章解释了有关这些设置的更多信息:krypted.com/mac-os-x/maximum-files-in-mac-os-x
    • 另外,我必须使用ulimit -S -n 2048 才能看到它的变化。
    【解决方案2】:

    还有一件事:端口限制是 65535。所以你可能得不到你想要的那么多。

    【讨论】:

      【解决方案3】:

      尝试以 root 身份运行(例如,在运行 ulimit 命令和您的程序之前执行“sudo -s”)。

      请注意,我不确定一次超过 100 万个 TCP 套接字是否真的可以实现(尽管我很想知道您尝试它时会发生什么;^))

      另外,请查看this

      【讨论】:

      • 嗯,1M 连接可能不现实,但我们会看看我能走多远。只是不想被 ulimits 人为限制。
      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多