OS X Yosemite - 打开的文件太多

vei*_*lig 18 homebrew osx-yosemite macos

我最近从小牛队升级到优胜美地....头痛接踵而至

我很确定我的问题在于我可以打开的文件数量-但我不确定如何解决它。我也很确定我已经阅读了关于创建/etc/sysctl.conf文件和/etc/launchd.conf文件的每篇文章/提示

为清楚起见,这就是它们目前的样子 nb(我什至不确定这些是否是将它们放入的正确命令 - 我已经尝试了几乎所有东西和每种组合。即:更高的值,更低的值, 删除命令, 添加命令)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512
Run Code Online (Sandbox Code Playgroud)

我也试过增加我的 ulimit 值 - 对于我当前的会话,无论是全局还是本地...

ulimit -a

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096
Run Code Online (Sandbox Code Playgroud)

好的 - 这是我最初开始头痛的地方......我的数据库(通过自制软件安装的 percona-server 5.6.21-69.0)开始窒息和死亡,并且在 mysql-error.log 中它被填满了错误too many files open

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files
Run Code Online (Sandbox Code Playgroud)

这是我最初开始尝试通过“升级”我的 ulimit、maxfiles、maxproc 等来解决该问题的地方...

最终 - 沮丧,我继续前进,稍后会回到这个问题。所以然后我sudo gem install nokogiri 一遍又一遍地尝试它会失败并吐出同样的错误(很多重复关于 builder.rb 未能构建 gem 本机扩展 - 其次是一堆重复的堆栈跟踪日志 Gist

nokogiri 安装错误 nokogiri 安装错误

我已经尝试/用谷歌搜索了很多不同的方法来解决这个问题(即:附加标志等)。真是太神奇了 - 当我开始认为这个问题与打开的文件/进程的数量有关时,是当我top在安装 gem时检查......我很惊讶地看到我发现了什么

期间顶 gem install nokogiri 须藤宝石安装 nokogiri

看起来我的进程一直在分叉,这对我之前图片中的这一行很有意义(请参阅“nokogiri 安装错误图片”)

sh: fork: Resource temporarily unavailable

所以我有点想法,但我不太确定如何调试文件数量?

更新

好吧,我设法安装了 nokogiri。不幸的是,我不确定是什么修复了它 b/c 我尝试了很多东西。但我认为它必须解决重新安装 ruby​​ 的问题。但是,当我使用任何类型的数据库时,我仍然遇到相同的问题,我的数据库抱怨打开的文件太多

vei*_*lig 16

/etc/launchd.conf在优胜美地 (10.10) 中,修改大量 google 查询和 SO 建议似乎对我不起作用。经过多次更改/重新启动/测试组合后,最终工作的是修改(或创建,如果它不存在)/etc/sysctl.conf文件。

这是我必须投入的才能让它发挥作用

kern.maxfiles=65536
kern.maxfilesperproc=65536
Run Code Online (Sandbox Code Playgroud)

我不确定是否kern.maxfiles需要在那里,但是当我把它单独放在那里时,我仍然遇到同样的问题,当我添加kern.maxfilesperproc一切开始工作时。


小智 8

要在 Mac OS X Yosemite 中在系统范围的基础上调整打开文件限制,您必须创建两个配置文件。第一个是/Library/LaunchDaemons/limit.maxfiles.plist包含以下 XML 配置的属性列表(又名 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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>
Run Code Online (Sandbox Code Playgroud)

这会将打开文件限制设置为 65536。第二个 plist 配置文件应存储在/Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>
Run Code Online (Sandbox Code Playgroud)

两个 plist 文件都必须由 拥有root:wheel并具有权限-rw-r--r--。默认情况下,此权限应该到位,但您可以通过运行sudo chmod 644 <filename>. 虽然上面解释的步骤将导致在重新启动时正确设置系统范围内的打开文件限制,但您可以通过运行手动应用它们launchctl limit

除了在系统级别设置这些限制,我们建议在会话级设置,以及通过附加以下行到你bashrcbashprofile或类似的文件:

ulimit -n 65536
ulimit -u 2048
Run Code Online (Sandbox Code Playgroud)

与 plist 文件一样,您的 bashrc 或类似文件应该具有-rw-r--r--权限。此时,您可以重新启动计算机并在终端中输入 ulimit -n。如果您的系统配置正确,您应该看到 maxfiles 已设置为 65536。

来源:http : //docs.basho.com/riak/latest/ops/tuning/open-files-limit/


小智 5

Yosemite 上的默认值似乎是 12K 和 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
Run Code Online (Sandbox Code Playgroud)

只有设置kern.maxfiles/etc/sysctl.conf似乎已经解决了我的问题。/etc/sysctl.conf文件:

kern.maxfiles=24576
Run Code Online (Sandbox Code Playgroud)