Mac AS 编译时提示Too many open files

3,949 阅读2分钟

昨天在合并代码后,一个同事的mac电脑,as在编译时突然报错“Too many open files”,字面意思就可以看出打开的文件过多,

首先想到的是as内存爆了,然后进入设置:

Android Studio -> Preferences -> Appearance & Behavior -> System Settings -> Memory Settings

将IDE max heap size设置为最大 2560

重启电脑后再次编译 => 结果仍然报错

然后,继续分析原因,网上查找

结果大部分都是说Mac open files太小了,要重新设置,但是按照网上设置了接近一下午,都不理想,要不就是设置了不起作用,要不就是设置后重启电脑又还原了。下班之后,继续搞,最终找到一种有效的方式:

Mac 终端输入命令: launchctl limit

可以得到以下结果:

中间一列表示soft的限制,最右边一列表示的是hard限制

可以看到maxfiles soft限制为256,而hard则无限制,所以这里可以进行调整一下;同时 maxproc soft为709,hard 为1064

所以方法就是修改这两个参数。

方法如下

一、设置 maxfiles

  • 打开下面文件夹:/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>65536</string>
          <string>65536</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
</plist>

二、设置 maxpro

  • 打开下面文件夹:/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>

两个文件保存完毕后重启电脑

再输入命令launchctl limit 可以看到maxfiles和maxpro都会被改了,运行程序可以正常进行!!!