【问题标题】:"Too many open files" when executing gatling on Mac在 Mac 上执行 gatling 时“打开的文件太多”
【发布时间】:2016-02-23 11:54:37
【问题描述】:

在我的 Macbook Pro 15(16 Giga 内存,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 时,我可以一直运行到 10200 个套接字。相同的东西,即使在所有组合(ulimit、sysctl、launchctl、...)中执行了所有命令之后,也会产生不同的效果。

最好的问候

【问题讨论】:

  • 并尝试了 doccu 在gatling.io/docs/2.0.0-RC2/general/operations.html 上所说的内容?例如而不是 20k 将 300k 设置为 kerm.*?
  • 感谢您的回答。我找到了我的问题的答案。我的问题来自于我无法对我的用户执行 ulimit(权限被拒绝),并且“sudo ulimit”对我的用户的当前 shell 没有影响。所以,我的解决方案是在 root 用户 (sudo -s) 下执行我的加特林压力测试,为什么我不能在没有 sudo 的情况下执行 ulimit?从 Intellij(10 240 限制)执行 java 程序时问题仍然存在。我知道在 Intellij 中执行这样的程序是没有意义的,只是好奇:)
  • 对于intellij,答案是修改Info.plist文件中intellij的vmoptions,在文件末尾的VMOptions键中添加“-XX:-MaxFDLimit”。更改文件 idea.vmoptions 无效。对于 ulimit,答案是在我的 /etc/profile 中添加“ulimit -n 23000”。

标签: java macos shell osx-elcapitan


【解决方案1】:

以防万一其他人从 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 限制最大文件数

4. 加载这些新设置:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

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

launchctl limit maxfiles

【讨论】:

  • 一个非常有帮助的答案!
  • 这个 limit.maxfiles.plist 配置在 Mac OS 10.15 / Java 1.8 上对我不起作用...还有其他人遇到这个问题吗?
【解决方案2】:

我找到了问题的答案。

Ulimit 和 Shell

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

在 root 用户 (sudo -s) 下执行我的加特林压力测试。 在/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>

谢谢

【讨论】:

  • 这个 limit.maxfiles.plist 配置在 Mac OS 10.15 / Java 1.8 上对我不起作用...还有其他人遇到这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2019-02-23
相关资源
最近更新 更多