Mac reportCrash 进程占用 CPU 过高问题

Mac reportCrash 进程占用 CPU 过高问题

David Balaban

Mac 上的 ReportCrash 是什么?

在 macOS 上,ReportCrash 是运行在“launchd”父进程下的内置崩溃处理程序。每当应用程序或后台进程意外终止时,该组件就会被唤醒,检查发生了什么,并将诊断报告写入磁盘,以便开发人员(有时也包括您)查看出了什么问题。

ReportCrash CPU drain on Mac

从技术上讲,ReportCrash 以两种方式运行:

  • 作为用户级进程的 LaunchAgent,将报告写入您的
    ~/Library/Logs/DiagnosticReports/ 文件夹;
  • 作为系统和 root 拥有进程的 LaunchDaemon,将报告存储在系统级诊断日志目录中。

在最近的 macOS 版本中,熟悉的“应用程序意外退出,发送给 Apple?”对话框是更广泛报告堆栈的一部分,Problem Reporter 作为可见的前端,而 ReportCrash 在幕后完成大部分繁重的工作。

在正常情况下,您几乎不会注意到此活动。应用程序崩溃,ReportCrash 短暂介入,写入日志并退出。CPU 使用率瞬间飙升,然后回落至零。这就是它应该工作的方式。


为什么 ReportCrash 会独占 CPU

当您看到 ReportCrash 占用 50-300% 的 CPU(在多核系统上)并且在活动监视器 (Activity Monitor) 中不断重新出现时,它几乎从来不是真正的罪魁祸首。它是信使。真正的问题是其他在该循环中不断崩溃的东西。

常见的模式是:

  1. 一个进程启动。
  2. 它几乎立即崩溃。
  3. launchd 重新启动它。
  4. ReportCrash 醒来处理另一次故障。
  5. 这种情况不停地重复。

ReportCrash activity monitor macOS

由于生成和压缩崩溃报告并非微不足道的工作,陷入此循环的进程可能会让 ReportCrash 全天候忙碌。论坛和问答网站上的大量用户报告都显示了同样的故事:ReportCrash 持续的高 CPU 使用率几乎总是与不断崩溃和重新启动的后台代理、扩展或框架相关。

典型的潜在罪魁祸首包括:

  • 因数据损坏而窒息的同步和索引守护进程(例如,联系人、建议或搜索相关服务);
  • macOS 更新后损坏的第三方菜单栏应用程序或助手
  • 已卸载应用程序的残留物,其 LaunchAgents 或 LaunchDaemons 不断启动不再存在的二进制文件;
  • 开发工具或模拟器(Xcode、iOS 模拟器等),其中组件在测试期间反复崩溃。

简而言之,ReportCrash 吵闹是因为其他东西病了。目标是找到那个“东西”,修复或删除它,然后才考虑触碰 ReportCrash 本身。

顺便说一句,这种模式与我报道过的其他涉及 chronodcontactsdsyspolicydwdavdaemon 的高 CPU 故事非常相似——一个小小的后台工作者脱轨,并将系统性能一同拖垮。


如何修复 Mac 上的 ReportCrash 高 CPU 使用率

第一步:找出什么在循环崩溃

如果您只做一件事,请做这个。您需要知道哪个进程将 ReportCrash 拖入了过度工作模式。

  1. 打开 控制台 (Console)
    • Command–Space,输入 Console,然后按 Return
  2. 在侧边栏中,查找 崩溃报告 (Crash Reports)(或使用“报告”下的“Crash Reports”部分)。
  3. 日期 排序并检查最近的条目:
    • 您可能会看到同一个进程名称在短时间内重复多次。
  4. 如果崩溃报告看起来是空的,请切换到:
    • system.log所有信息 (All Messages),然后搜索诸如 crashService only 之类的术语。

Crash Reports

记下:

  • 违规进程名称(例如 suggestd、菜单栏应用程序、某些助手),
  • 它的 路径(如果可见),以及
  • 大致崩溃的频率。

这是您的主要嫌疑人。


第二步:删除或修复违规的应用程序或组件

一旦知道什么在崩溃,最好的修复方法通常是更新、重置或卸载该特定项目。

  1. 如果是您了解并使用的常规应用程序:
    • 如果正在运行,请退出它。
    • 在其菜单中(通常是 应用名称 ▸ 检查更新)或通过 App Store 检查更新。
    • 如果崩溃继续,尝试彻底重新安装:
      • 将应用程序从 应用程序 拖到废纸篓。
      • 重启。
      • 从官方来源下载新副本并重新安装。
  2. 如果是您不再关心的应用程序:
    • 应用程序 中,将其连同明显的辅助工具(卸载程序、更新程序)一起删除。
    • 然后在以下位置检查残留组件:
      • ~/Library/Application Support/
      • ~/Library/LaunchAgents/
      • /Library/LaunchDaemons/
    • 仅删除明显与该应用程序相关的项目(匹配其名称或供应商)。

Delete offending items

  1. 如果是系统服务(例如 suggestd、联系人相关或 iCloud 同步):
    • 暂时禁用通过的功能:
      • 系统设置 ▸ 互联网帐户 中关闭有问题的帐户。
      • iCloud 联系人Siri 与 Spotlight 建议或类似项目切换为关闭,稍等片刻,然后重新打开。
    • 如果在禁用特定帐户或功能后 CPU 风暴平息,那么那里很可能存在坏数据。

iCloud Contacts

这个想法很简单:如果不断崩溃的东西消失了或开始表现正常,ReportCrash 就不再有理由不停地运行。


第三步:清理过大的崩溃日志和诊断信息

即使您驯服了崩溃循环,系统也可能散落着成千上万个旧的崩溃报告。它们本身通常不会导致 CPU 峰值,但会浪费磁盘空间并使分析变得嘈杂。

您可以按如下方式安全地清理它们:

  1. 访达 (Finder) 中,按 Shift–Command–G 打开 前往文件夹…
  2. 逐一访问这些位置:
    • ~/Library/Logs/DiagnosticReports/
    • /Library/Logs/DiagnosticReports/(您可能需要管理员权限)
  3. 将较旧的 .crash.panic 文件移至废纸篓(如果您想要备份,则移至存档文件夹)。
  4. 当您确定一切稳定时清空废纸篓。

DiagnosticReports

如果根本原因仍然存在,这将不会直接停止 ReportCrash 的 CPU 使用,但它可以保持您的 Mac 整洁,并可能略微减少后台 I/O。


第四步:禁用有问题的登录项和后台助手

一个非常常见的场景是,一个早已被遗忘的应用程序的 登录项或 LaunchAgent 试图启动不再存在的东西。该二进制文件无法正确启动,立即崩溃,ReportCrash 被刷屏。

执行以下清理:

  1. 检查登录项
    • 转到 系统设置 ▸ 通用 ▸ 登录项
    • 登录时打开允许在后台 下,禁用您不认识或不再使用的项目。
  2. 检查 LaunchAgents 和 LaunchDaemons
    访达 中,使用 前往 ▸ 前往文件夹… 并查看:
    • ~/Library/LaunchAgents/
    • /Library/LaunchAgents/
    • /Library/LaunchDaemons/

  3. 对于每个文件夹:
    • 名称 排序,查找明显属于已卸载应用程序的项目。
    • 将可疑的 .plist 文件移至桌面上的临时文件夹,而不是直接删除它们。
    • 重启并观察活动监视器,看看 ReportCrash 是否平静下来。

LaunchDaemons

如果几天内一切正常,您可以安全地删除那些隔离的 .plist 文件。如果重要的东西坏了,请将它们移回。


第五步:在安全模式下测试

安全模式是判断是否涉及第三方组件的快速方法。在此诊断模式下,macOS 仅加载基本扩展,并禁用大多数登录项和 LaunchAgents。

  1. 关闭您的 Mac。
  2. 打开它并根据您的 CPU 类型 按住相应的键
    • Intel Mac: 在启动提示音后立即按住 Shift,直到看到登录窗口。
    • Apple silicon Mac:
      • 按住电源按钮直到出现“正如加载启动选项”。
      • 选择您的启动磁盘,按住 Shift,然后单击 在安全模式下继续
  3. 登录并打开 活动监视器

如果 ReportCrash 在安全模式下很安静,但在正常重启后又重新疯狂,那么您几乎肯定是在处理第三方软件(登录项、内核扩展、助手工具)。使用该线索更积极地重新审视步骤 2 和 4。


第六步:重置 SMC 和 NVRAM(针对顽固情况)

虽然与 ReportCrash 没有直接联系,但电源管理或硬件状态的低级故障有时表现为随机、重复的崩溃和系统不稳定。重置 SMC (Intel Macs) 和 NVRAM 可以帮助清除这些障碍。

具体步骤取决于您的 Mac 型号,但大致如下:

  • NVRAM 重置 (Intel Macs):
    1. 关闭您的 Mac。
    2. 打开它并立即按住 Option–Command–P–R
    3. 按住按键约 20 秒,然后松开。
  • SMC 重置 (Intel Macs):
    对于带有/不带可拆卸电池的 MacBook、iMac 和 Mac mini,步骤有所不同。请参阅 Apple 针对您的确切型号和 macOS 版本的说明。

在 Apple silicon Macs 上,没有单独的 SMC 或 NVRAM 重置——干净的关机和开机序列实际上做的是同样的事情。

如果在排除了应用程序级原因并执行了这些重置后,ReportCrash 高 CPU 仍然存在,那么您就处于“高级调整”领域。


第七步:(高级) 暂时禁用 ReportCrash

此步骤是可选的,针对有经验的用户。在存在已知、不可避免的崩溃循环的环境中(例如,模糊测试、特定的测试设置),一些管理员选择 禁用 ReportCrash,以免它浪费资源生成无休止的日志。

对于普通的家庭或办公室 Mac,我仅建议将其作为追踪真正罪魁祸首时的 短期变通办法,而不是永久修复。您将失去自动崩溃诊断,并可能掩盖更深层问题的迹象。

如果您仍想继续,可以从终端卸载 ReportCrash LaunchAgent 和 LaunchDaemon:

  1. 应用程序 ▸ 实用工具 打开 终端
  2. 小心运行这些命令(第二个命令将提示您输入管理员密码):

launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

Temporarily disable ReportCrash in Terminal

这会阻止 ReportCrash 自动为用户和系统进程启动。

要稍后 重新启用 崩溃报告,请运行:

launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

再次强调,将其作为最后的手段,而不是您的第一步。如果禁用 ReportCrash 看起来“解决”了问题,实际上您只是取下了温度计,并没有治愈发烧。


如何预防未来的 ReportCrash 问题

您无法阻止每一次崩溃,但可以通过养成一些习惯来降低 ReportCrash 失控的几率:

  • 保持 macOS 和核心应用程序最新:稳定性修复是系统和应用程序发行说明中的常客。
  • 对启动项挑剔:定期检查登录项并禁用任何不需要在每次启动时加载的内容。
  • 彻底卸载应用程序: 当您停止使用应用程序时,删除其支持文件和启动助手,而不仅仅是应用程序中的主包。
  • 避免可疑的安装程序和捆绑包: 广告软件和编写糟糕的后台代理是奇怪崩溃的常见来源,不仅仅是浏览器劫持者。
  • 关注活动监视器: 如果您的风扇突然转动,快速浏览 CPU 和能源标签可以在行为不当的进程变成慢性问题之前抓住它们。

总结

当 CPU 受到影响时,责怪 ReportCrash 本身是一种误解。当该进程独占 CPU 数小时时,这强烈表明某些应用程序、服务或残留组件陷入了无情的崩溃和重启循环。

修复通常是有条理的,而不是戏剧性的:找出崩溃的原因,修复或删除它,清理登录项和 LaunchAgents,然后才考虑像暂时禁用 ReportCrash 这样的高级措施。一旦潜在的不稳定因素消失,您的 Mac 应该会恢复到往常安静、凉爽且不引人注目的行为。

常见问题

1. ReportCrash 是 Mac 上的病毒或恶意软件吗?

2. 在活动监视器中结束 ReportCrash 进程安全吗?

3. 如何知道哪个应用程序导致 ReportCrash 使用高 CPU?

4. 我可以永久禁用 Mac 上的崩溃报告吗?

5. 什么时候应该考虑重新安装 macOS 来修复 ReportCrash 问题?

这篇文章有帮助吗?请评价这个。