在Mac上执行gatling时"打开文件太多"

bsh*_*bsh 4 java macos shell osx-elcapitan

在我的Macbook Pro 15'(16千兆RAM,4个物理内核)上从Mac iOS(El Capitan)上的shell执行gatling(加载测试工具)时,我的错误是"打开的文件过多".

我花了几天时间来解决这个问题,没有任何成功:

  • 我在/Library/LaunchDaemons/limit.maxfiles.plist中创建了一个文件,其中包含从Web复制的XML文件内容,没有结果.

  • sudo ulimit -n 15000不起作用.

  • 我使用以下内容创建了一个文件/etc/sysctl.conf

kern.maxfiles = 20480
kern.maxfilesperproc = 20480

  • 我没有任何结果尝试了命令"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)执行Gatling时,我可以直到10 200个套接字.同样的事情,即使在所有组合中执行所有命令(ulimit,sysctl,launchctl,...)之后,也会产生不同的效果.

最好的祝福

nin*_*xel 7

万一其他任何人从谷歌到这里,这里是更改最新版本的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> 
Run Code Online (Sandbox Code Playgroud)

2. 更改新文件的所有者:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
Run Code Online (Sandbox Code Playgroud)

3. 检查当前设置launchctl limit maxfiles

4. 加载以下新设置:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
Run Code Online (Sandbox Code Playgroud)

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

launchctl limit maxfiles
Run Code Online (Sandbox Code Playgroud)

  • 这个 limit.maxfiles.plist 配置在 Mac OS 10.15 / Java 1.8 上对我不起作用...还有其他人遇到这个问题吗? (2认同)

bsh*_*bsh 5

我找到了问题的答案.

Ulimit和壳牌

我的gatling问题来自于我无法用我的用户执行ulimit(权限被拒绝),而"sudo ulimit"对我的用户的当前shell没有影响.所以,我的解决方案是

在root用户(sudo -s)下执行我的gatling压力测试.在/ etc/profile文件中添加一行"ulimit -n 23000".

的IntelliJ

对于intellij,答案是修改Info.plist文件中intellij的vmoptions,以在文件末尾的VMOptions键中添加" -XX:-MaxFDLimit ".

更改文件bin/idea.vmoptions无效.

应通过在/ Library/LaunchDaemons目录中添加文件"limit.maxfiles.plist"来更改maxfiles的全局值.

<?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>66111</string>
          <string>66111</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>
Run Code Online (Sandbox Code Playgroud)

谢谢