在Macbook Pro 15'(16 Giga的RAM,4个物理核)的Mac iOS(El Capitan)上的 shell 上执行加特林(负载测试工具)时,出现错误“打开的文件太多”。

我花了几天时间解决此问题,但没有成功:

  • 我在/Library/LaunchDaemons/limit.maxfiles.plist中创建了一个文件,其中包含从网络复制的XML文件内容,没有结果。
  • sudo ulimit -n 15000不起作用。
  • 我创建了一个文件/etc/sysctl.conf,内容如下


  • 我尝试了命令“sudo launchctl limit maxfiles 20480 20480”,但没有任何结果。

  • 我认为“/Library/LaunchDaemons/”中的xml文件似乎有一定作用,因为当我更改maxfiles的值时,命令“sudo launchctl limit”会向我显示我在XML文件中输入的值,以及何时用某个值调用“ulimit -n”,它接受小于该值的每个值,但是当我调用“ulimit -n”时,结果每次都是相同的“4096”。

    我看到在Java中,限制为10240,所以我尝试了VM选项(-XX:-MaxFDLimit),但没有任何效果。

    奇怪的是,当我从Intellij(IDE)执行加特林时,我直到10 200个套接字。即使在所有组合(ulimit,sysctl,launchctl等)中执行了所有命令之后,同一件事也会产生不同的效果。

    最好的祝福

    最佳答案

    以防万一其他人从Google登陆,以下是更改最新版本OS X的打开文件限制所需的步骤:

    1.
    /Library/LaunchDaemons中,创建一个名为limit.maxfiles.plist的文件,并将以下内容粘贴到(可以随意更改两个数字(分别是软限制和硬限制)):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
            "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>limit.maxfiles</string>
        <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxfiles</string>
          <string>64000</string>
          <string>524288</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>ServiceIPC</key>
        <false/>
      </dict>
    </plist>
    

    2.
    更改新文件的所有者:
    sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
    

    3.
    检查当前设置
    launchctl限制maxfiles

    4.
    加载以下新设置:
    sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
    

    5.
    最后,检查限制是否正确:
    launchctl limit maxfiles
    

    10-01 15:16