升级OSX High Sierra与Xcode9.2后大项目编译耗时激增原因问询
关于Xcode 9.2 + High Sierra编译时长暴增、xcexec频繁调用close的问题分析
我当时在升级到High Sierra和Xcode 9.2后也碰到过几乎一模一样的问题,折腾了好一阵才搞清楚根源,主要有这几个可能的成因:
APFS文件系统兼容性bug:High Sierra是苹果首次默认采用APFS的系统版本,而Xcode 9.2对APFS的文件描述符管理存在适配问题。xcexec作为编译工具的包装器,在处理大量编译文件时,会频繁打开和关闭文件描述符,但APFS在处理这类高频操作时存在效率瓶颈,导致
close系统调用次数异常飙升,占用大量CPU资源拖慢编译。Xcode 9.2自带的xcexec二进制缺陷:这个版本的xcexec本身存在逻辑错误——作为clang等编译工具的启动包装,它没有正确复用已打开的文件描述符,每次执行子任务都会重复创建并立即关闭描述符,每分钟数百万次的
close调用直接把CPU占满,让编译流程彻底卡住。重装Xcode没用也印证了这是版本自带的bug,不是安装损坏导致的。旧编译缓存的冲突:升级后如果没有彻底清理旧的编译缓存,比如
~/Library/Developer/Xcode/DerivedData目录下的旧缓存文件,这些缓存和新Xcode版本不兼容,会导致xcexec在读取或验证缓存时陷入循环操作,不断触发文件打开/关闭的流程。
对应的解决办法可以试试这些:
- 升级Xcode到9.3及以上版本:苹果在后续版本中专门修复了xcexec的这个bug,这是最彻底的解决方式;
- 彻底清理编译缓存:执行命令
rm -rf ~/Library/Developer/Xcode/DerivedData和rm -rf ~/Library/Caches/com.apple.dt.Xcode,然后重启Xcode重新编译; - 临时切换回HFS+文件系统(如果你的存储设备还没格式化为APFS):虽然麻烦,但确实能规避APFS和Xcode 9.2的适配问题;
- 关闭增量编译:在Xcode的Build Settings里把
Incremental Build设为No,虽然会损失一点增量编译的效率,但能减少xcexec的异常操作次数。
内容的提问来源于stack exchange,提问作者Berik
相关产品推荐
相关产品推荐

