【问题标题】:Xcode 4.3.2 and 100% CPU constantly in the idle timeXcode 4.3.2 和 100% CPU 不断在空闲时间
【发布时间】:2012-05-18 08:56:21
【问题描述】:

我的 Xcode 从昨天开始在处理中等大小的项目(大约 200 个源文件)时表现得非常严重。项目正确编译并在模拟器和设备中运行。我不使用任何 3rd 方库,除了少数广泛使用的包含(如 JSON 或 facebook ios sdk)。

它持续全速使用 CPU,即使它处于空闲状态(没有索引、没有编译、没有编辑)。 RAM的使用量比较正常(300-50MB)。

我的机器使用:Core 2 Duo 3.04Ghz CPU、8GB RAM 和 Vertex OCZ 3 SSD 驱动器。

我已经尝试了在 stackoverflow 找到的所有建议解决方案:

  1. 清理项目
  2. 在管理器中清理派生数据
  3. Organizer 中已清理的存储库
  4. 按照此处的建议从工作区和 userdata 文件中清理了 xcodeproject 包:https://stackoverflow.com/a/8165886/229229(它只是暂时有帮助,大约一分钟后会重新开始)。
  5. 多次重启Xcode(效果同4)。
  6. 禁用“实时问题”
  7. 甚至重新安装了 Xcode

没有任何帮助。在大多数情况下,Xcode 会暂时索引项目,然后恢复正常性能,但过一会儿又变得无法使用。两个核心的 CPU 都跳回 95-100%,智能挂起等...

我附上了仪器如何看到 Xcode 进程的屏幕截图:

更新: 经过片刻的希望,我通过移动几个来解决问题

#import "header.h"

从头文件到实现文件的语句并用前向声明交换它们......一段时间后问题又回来了。 我正在添加控制台日志。 奇怪的是,与 Xcode 相关的日志是在我退出后出现的,而不是在运行 itef 期间。

控制台日志:

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

【问题讨论】:

  • 其他项目呢?它的行为方式是否相同?
  • 我的猜测是您有一个文件或一组文件,这使得语法高亮、代码完成等所需的解析进入无限循环(这将是一个错误) .也许lsof 可以告诉你它正在处理哪个文件。使用lsof -p <pid> 检查正在运行的进程。
  • @Ondra Peterka:不,它只在这个中表现这种方式。
  • @mvds:你可能是对的,因为......在将头文件中的几个#imports 移动到实现文件之后,然后与前向声明(\@class 和 \@protocol 。 ..),问题就神奇地消失了!看起来即使编译器成功完成,解析器也有一些导入循环。
  • 如果您可以复制该行为,请在radar.apple.com提交错误报告

标签: xcode performance cpu xcode4.3


【解决方案1】:

阻止我噩梦的是:

  1. 在项目构建设置中将始终搜索用户路径更改为 NO(粗体)。
  2. 删除 -objC 标志其他链接器标志(也是粗体设置)。

然后删除 Derived Data 并等待 Xcode 重新索引。

我不确定它们中的哪一个有帮助,因为我同时更改了它们,而且我的进度太落后了,我没有时间测试它。我会在空闲时间重现错误和解决方案时改进这个答案。

不过,有一个提示: *重新考虑并重新检查您的项目/目标构建设置。*

这种奇怪的行为很可能是由构建设置的某些不幸组合引起的。

【讨论】:

  • 我可以从其他链接器标志中删除 -objC 标志和 all_load,始终搜索用户路径已经在 NO。所以我想这是两者的结合。谢谢。
【解决方案2】:

我所有的项目都会不时这样做。我可以关闭 X-code 并重新启动它,它会运行一段时间,然后重新使用 200% 的 CPU 时间(两个核心完全加载)。

我的解决方案是使用 AppCode 作为我的主要 IDE(具有更好的 IDE 的额外好处,但这是另一回事)。我只在需要编辑情节提要时启动 XCode,并在完成后将其关闭——通常这样可以避免问题。

AppCode 运行相同的项目文件/结构具有更好更快的索引,并且从未遇到此问题,所以我看不出这怎么可能是设置/配置问题 - 它一定是 XCode 中的错误。因此,我不会浪费时间更改您的代码结构,因为它很可能只会延迟问题,而不是修复它。

【讨论】:

    【解决方案3】:

    无法知道 OP 是否真的有不同的根本原因,但对我来说,这似乎是 git 的 Xcode 故障。 添加/提交我当前的更改解决了我的问题。这是完整的场景以及我为修复它所做的工作:

    • 环境:
      • Xcode 版本 5.1.1 (5B1008)
      • Macbook Pro OS X 10.9.2
      • 2 GHz Intel 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 repo(在主 Xcode 项目中有一个子模块 repo 和一个子项目)。
    • 我在 repo 的主 repo 和 submodule 部分都有待更改。
    • 我关闭了 Xcode 并 git 添加并提交了我当前的所有更改。
    • 重新打开 Xcode 并 VIOLA! 不再有 CPU 被杀死。返回到 0.0% 的空闲使用率。

    Xcode 5.1.x 对我来说似乎也以其他方式与 git 作斗争(有时不接受 GUI 中的更改等),所以可能存在 Xcode git 集成错误。

    【讨论】:

    • 感谢这为我解决了这个问题。提交我的更改,使 Xcode 停止处理/索引。 Xcode 7.3.1 和 OS X 10.11.5。我的 xcodeproject 混合了 iOS 的 swift/objc,它使用 carthage 并嵌入了多个框架。
    【解决方案4】:

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

    • clang 必须生成多少个 PCH?在您的项目中,对于您的项目中使用的每种方言/语言和任何相关目标,这将是一个用于 C,一个用于 ObjC,一个用于 C++,一个用于 ObjC++。也就是说 - 如果您的应用程序的 PCH 中包含一个依赖库并且您正在破解该库,那么每次更改 pch 包含的标头时,应用程序目标中的所有代码意义都必须失效并再次解析。如果你的目标编译一个 C 文件,它需要一个用于 C 的 PCH。如果它需要一个用于 ObjC,它需要为 ObjC 生成一个。
    • 您多久更改一次 PCH(或其中包含的任何内容)?
    • 从 PCH 中删除包含。看到 PCH 中包含的每个链接框架并不罕见(避免这样做!)。
    • 如果您更改构建或预处理器设置,它可能需要每次完全重建目标的代码感知索引。
    • 您是否尝试过禁用实时问题?

    【讨论】:

    • 禁用实时问题也没有帮助。我不经常更改 PCH。我只添加了 Constants.h(仅包含一些 #define(s)),但这是很久以前的事了,此后项目的表现一直很好。
    • 我投了赞成票,因为它让我重新检查和重新设计包括结构和搜索路径,这似乎有帮助。
    【解决方案5】:

    在我的项目(所有项目)中,它是自动完成/智能感知。当我更改 .h 文件中的一行代码时,它变得乱七八糟,CPU 使用率增加了 100%(超过一个内核)。 我刚刚禁用了它,现在我必须为自己考虑更多(就像我以前在 Windows 上做的那样),它在 CPU 使用率较低时效果很好。

    【讨论】:

      【解决方案6】:

      我以前也遇到过这个问题,是git引起的。虽然我对git不是很了解。我把项目目录下的.git文件去掉了,就正常了。顺便说一下. git 被隐藏了。

      【讨论】:

        猜你喜欢
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        • 2019-04-26
        • 2013-08-03
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多