OS X Yosemite-打开太多文件


18

我最近从小牛队升级到优胜美地……。

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

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

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

我也尝试增加我的ulimit值-在本次会议的全球和本地范围内...没有bueno

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

好的-这是我最初开始头痛的地方...我的数据库(通过自制软件安装的percona服务器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

这是我最初开始尝试通过“增加”我的ulimit,maxfiles,maxproc等来解决该问题的地方。

最终-沮丧,我继续前进,稍后再讨论该问题。所以然后我试图sudo gem install nokogiri 一遍又一遍,它会失败并吐出同样的错误(关于builder.rb的很多重复都未能构建gem native扩展-随后是一堆重复的stacktraces Logs Gist

nokogiri安装错误 nokogiri安装错误

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

在期间顶 gem install nokogiri sudo gem install nokogiri

看来我的过程一直在派生,这对于我上一张图片中的这一行很有意义(请参阅“ nokogiri安装错误图片”)

sh: fork: Resource temporarily unavailable

因此,我有点主意,但是我不确定如何调试#个文件?

更新

好吧,我设法安装了nokogiri。不幸的是,我不确定我曾尝试过很多事情的原因。但是我认为必须重新安装红宝石。但是,当我使用任何类型的数据库时,我的数据库仍在抱怨打开的文件太多,这仍然导致了同样的问题。


嗯 大概应该不会产生那么多?也许还值得与那个宝石的开发者一起举一个bug。
slhck

Answers:


16

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

这就是我必须投入使其工作的原因

kern.maxfiles=65536
kern.maxfilesperproc=65536

我不确定是否kern.maxfiles需要将其放入其中,但是当我将其单独放入其中时,当我添加kern.maxfilesperproc所有内容后,仍然会遇到同样的问题。


我发现需要重新启动才能使这些变量生效(按预期方式)。您可以通过执行确认值已更改sysctl -a | grep kern.maxfiles
布莱克·弗雷德里克

8

要在Mac OS X Yosemite中在系统范围内调整打开文件的限制,必须创建两个配置文件。第一个是属性列表(aka plist)文件,/Library/LaunchDaemons/limit.maxfiles.plist其中包含以下XML配置:

<?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>

这会将打开文件限制设置为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>

两个plist文件必须由拥有root:wheel并具有许可权-rw-r--r--。默认情况下,此权限应存在,但是您可以通过运行来确保它们已存在sudo chmod 644 <filename>。尽管上述步骤将导致重新启动时正确设置系统范围的打开文件限制,但是您可以通过运行手动应用它们launchctl limit

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

ulimit -n 65536
ulimit -u 2048

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

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


1
“ launchctl限制maxfiles无限无限制; launchctl限制maxfiles”报告说,我的优胜美地10.10.5的最大值是2015年9月30日的10240,尝试对其进行试验似乎表明,如果您使用较大的显式数字,它将是忽略了。
Dave X

5

优胜美地的默认值似乎是12K和10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

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

kern.maxfiles=24576

塞拉利昂的值完全相同
Devin G Rhode

但是launchctl limit maxfiles给了我这个:maxfiles 256 unlimited
Devin G Rhode
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.