Xcode 4.3.2和空闲时间CPU不断达到100%

11

最近几天,我的Xcode在处理中等规模的项目(约200个源文件)时开始表现得非常沉重。工程可以正确编译并在模拟器和设备上运行。 我没有使用任何第三方库,除了一些广泛使用的包含文件(如JSON或Facebook iOS SDK)。

Xcode不停地使用CPU,即使它处于空闲状态(无索引、无编译、无编辑)。 RAM的使用相对正常(300-50MB)。

我的机器配置如下:Core 2 Duo 3.04Ghz CPU,8GB RAM和Vertex OCZ 3 SSD驱动器。

我已经尝试了stackoverflow上提供的每一个解决方案:

  1. 清理项目
  2. 在Organizer中清理Derived Data
  3. 在Organizer中清理存储库
  4. 根据这里的建议,从工作区和用户数据文件中清理xcodeproject捆绑包:https://dev59.com/p2035IYBdhLWcg3wbPU5#8165886 (这只有一小段时间有帮助,在一两分钟后就会重新开始)。
  5. 多次重新启动Xcode(与步骤4的效果相同)
  6. 禁用"实时问题"
  7. 甚至重新安装了Xcode

没有任何帮助。在大多数情况下,Xcode会对项目进行索引一会儿,然后回到正常的性能水平,但是过一段时间后又变得不可用了。 CPU跳回到两个核心的95-100%,智能卡顿等...

这里附上Xcode进程在Instruments中的截图:

enter image description here enter image description here enter image description here enter image description here enter image description here

更新: 当我把几个#import "header.h"语句从头文件移到实现文件并与前向声明交换后,有一段时间我以为自己解决了问题...但是过一会儿问题又出现了。 这里添加了控制台日志。 奇怪的是,与Xcode相关的日志只在我退出它后才出现,而不是在运行时出现。

控制台日志:

5/11/12 9:27:03.777 AM [0x0-0x45045].com.apple.dt.Xcode: com.apple.dt.instruments.backgroundinstruments: Already loaded
5/11/12 9:27:05.571 AM Xcode: Performance: Please update this scripting addition to supply a value for ThreadSafe for each event handler: "/Library/ScriptingAdditions/SIMBL.osax"
5/11/12 9:27:58.168 AM Xcode: ERROR: Failed to create an alert for ID "enabled" based on defaults: 1

其他项目呢?它的行为方式是否相同? - Ondrej Peterka
1
我的猜测是你有一个文件或一组文件,导致所需的语法高亮、代码完成等解析进入无限循环(这将是一个错误)。也许 lsof 可以告诉你它正在处理哪个文件。使用 lsof -p <pid> 来检查运行中的进程。 - mvds
@Ondra Peterka:不,它只在这一个中表现出这种行为。 - Lukasz
@mvds:你可能是对的,因为……在将一些#imports从头文件移动到实现文件中,并使用前向声明(@class和@protocol)进行交换后,问题神奇地消失了!看起来解析器存在一些导入循环,即使编译器成功完成。 - Lukasz
当发生这种情况时,您还可以检查是否有任何内容写入控制台日志。 - Ken Thomases
显示剩余2条评论
6个回答

5
停止噩梦的方法如下:
  1. 在项目构建设置中将Always Search User Path更改为NO(加粗)。
  2. 删除Other Linker Flags(也是加粗的选项)中的-objC标志。
然后删除Derived Data,等待Xcode重新索引。
我不确定哪一个帮助了,因为我同时更改了它们,而且我时间非常紧张,没有时间测试它。 在我有空闲时间时,我会改进这个答案,以便再现错误和解决方案。 然而,有一个提示: *重新思考和检查您的项目/目标构建设置。* 这种奇怪的行为很可能是由构建设置的某些不幸组合引起的。

我可以只是从其他链接器标志中删除-objC标志和all_load,始终搜索用户路径已经是NO了。所以我猜这是两者的结合。谢谢。 - Charles

3
我的所有项目都会时不时出现这个问题。我可以关闭 X-code,然后再重新启动它,它就能正常运行一段时间,但是之后又会回到 200% 的 CPU 使用率(两个内核完全负载)。
我的解决办法是使用 AppCode 作为我的主要 IDE(还有一个额外的好处是它是一个更好的 IDE,但这是另一件事)。只有在需要编辑 storyboard 时才启动 XCode,并在完成后关闭它 - 通常这可以避免出现问题。
AppCode 使用相同的项目文件/结构具有更好和更快的索引,并且从不遇到此问题,因此我无法看出这可能是设置/配置问题 - 这一定是 XCode 中的 bug。因此,我建议不要浪费时间更改代码结构,因为这很可能只会延迟问题而不能解决它。

2

无法确定 OP 是否有不同的根本原因,但我认为这可能是一个与 git 有关的 Xcode 故障。添加/提交我的当前更改解决了我的问题。以下是完整的情景以及我所做的事情来解决它:

  • 环境:
    • Xcode 版本 5.1.1(5B1008)
    • Macbook Pro OS X 10.9.2
    • 2 GHz 英特尔 Core i7,8GB RAM
  • 我注意到 Xcode 开始持续地使用 200% 的 CPU。
  • 不确定开始的时间,但在尝试创建快照时 Xcode 冻结了(400% 的 CPU 使用率持续数分钟,直到我强制退出 Xcode)
  • 重新打开后,我注意到 Xcode 仍然无限期地停留在 200% 的 CPU 使用率上。
  • 关闭所有项目并没有起作用。
  • 删除所有派生数据并重新启动也没有起作用。
  • 卸载 Xcode 并重新安装一开始有希望,但一旦我重新打开主要项目,CPU 就会恢复到持续的 200% 的 CPU 使用率。 (在索引完成后)
  • 关闭有问题的项目没有帮助。Xcode 现在再次陷入了永远使用 200% CPU 的状态。

在 Stack Overflow 上看了一圈后,有多个人暗示 git 可能是一个问题。

  • 我有一个稍微复杂的 git 仓库(包含一个子模块仓库和主 Xcode 项目中的子项目)。
  • 我在主仓库和子模块部分仓库中都有待处理的更改。
  • 关闭 Xcode 并使用 git 添加并提交所有我当前的更改。
  • 重新打开 Xcode,喔啦! 不再有被终止的 CPU。回到闲置使用率 0.0%

Xcode 5.1.x 对我来说似乎也在其他方面与 git 相互配合出现问题(有时无法在 GUI 中捕捉到更改等),因此可能存在 Xcode git 整合漏洞。


谢谢,这解决了我的问题。提交了我的更改后,Xcode停止了处理/索引。我的xcodeproject是混合的swift/objc用于iOS,它使用carthage并嵌入了几个框架。 - neoneye

1

看起来它正在解析包含在PCH中的ObjC。

  • clang需要生成多少个PCH?在您的项目中,对于每种方言/语言,包括C、ObjC、C++和ObjC++,以及任何依赖目标,都需要一个。也就是说,如果您的应用程序的PCH中包含了一个依赖库,并且您正在修改该库,那么每次您更改PCH包含的头文件时,应用程序目标中的所有代码感知都必须无效并重新解析。如果您的目标编译C文件,则需要一个C的PCH。如果需要ObjC的PCH,则需要为ObjC生成一个。
  • 您有多频繁地更改PCH(或其中包含的任何内容)?
  • 从PCH中删除包含的内容。通常会看到将每个链接的框架都包含在PCH中(避免这样做!)。
  • 如果更改了构建或预处理器设置,则可能需要完全重建目标的代码感知索引。
  • 您尝试过禁用实时问题吗?

禁用实时问题也没有帮助。我很少更改PCH。我只把Constants.h添加到其中(仅包含一些#define),但是那是很久以前的事了,项目在那之后一直表现得很好。 - Lukasz
我投票支持它,因为它指引我重新检查和重新设计包含结构和搜索路径,这似乎有所帮助。 - Lukasz

0
在我的所有项目中,自动完成/智能感知是最大的问题。当我在.h文件中更改一行代码时,它会失控,CPU使用率超过100%(超过一个核心)。 我只是禁用了它,现在我必须自己多思考一些(就像我在Windows上习惯的那样),这样可以以较低的CPU使用率运行得很好。

-1

我曾经遇到过这个问题,它是由 git 引起的。虽然我不太懂 git,但我在项目目录中删除了名为 .git 的文件,然后问题就解决了。顺便说一下,.git 是隐藏文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接