watchman的安装说明指导你这样设置kern.maxfiles
:
$ sudo sysctl -w kern.maxfiles=10485760
$ sudo sysctl -w kern.maxfilesperproc=1048576
在 macOS High Sierra 上,这两个值的默认设置为 131072。Watchman 的建议是对内核的性能关键设置进行 80 倍的更改。调整这些值可能会导致不同的性能特征,特别是对于像编译这样的文件繁重的操作。
Watchman 更改了限制,以便允许同时观看更多文件。
然而,Xcode 将开始索引您的项目并打开尽可能多的文件(通过kern.maxfiles
)。在编译阶段,Xcode 启动xcexec
,它将关闭所有打开的文件描述符以进行索引,然后才启动构建步骤子过程。该操作几乎不需要任何时间。但是换了之后kern.maxfiles
突然就这样了。
我在 2015 年中期的 MBP、macOS 10.13.3、Xcode 9.2.0 上进行了基准测试。
根据我的基准测试kern.maxfilesperproc
对 Xcode 的构建性能没有影响。
一旦kern.maxfiles
超过 327680,Xcode 构建的性能就会受到严重影响。
如果您需要在更大的项目中支持守望者,我建议设置kern.maxfiles
为(不大于)327680。
请注意,设置kern.maxfiles
withsysctl
不会在重新启动后保持不变。调整 中的/Library/LaunchDaemons/limit.maxfiles.plist
值。