Mac 运行极其缓慢

Mac 运行极其缓慢

我有一台 2011 年产的 MacBook Pro,配备 8 GB RAM。

关于 MacOS

我换了新的硬盘,7200 rpm,16 MB 缓存,从 ESD 磁盘完全重新安装了系统(没有从任何备份中安装)。系统运行非常慢,就像在 486 电脑上运行 Windows 2000 一样。

写文字很难,实际上也不可能做出像上网这样简单的事情。

这是活动监视器图片:实际上什么都没有运行,但 CPU 已满。

活动监视器

寻求建议

PS. 我检查了 CPU 使用率,kernel_task 进程(进程 #0)消耗了所有 CPU 资源。我还检查了 CPU 温度,没有问题。

CPU 温度

答案1

我解决了这个问题。

感谢这篇文章http://www.rdoxenham.com/?p=259

“修复” MacOS 10.7/10.8 中的 kernel_task CPU 问题 发布于 2012 年 6 月 5 日 更新(2013 年初):当我撰写本指南时,重点关注 Lion 10.7,当然,许多人已升级到 10.8 并报告使用相同原则取得成功。但是,尚未为较新的型号添加 plist 条目,例如新款 MacBook Air 或 MacBook Pro (+retina)。因此,如果您严格按照指南操作,可能会遇到型号标识符不可见等问题。通过电子邮件与其他人诊断后,似乎系统使用了目录中的另一个 plist,因此删除所有 plist 有效。我无法进一步评论或证明这是事实,因为我没有可用的硬件。让我知道这是否适合您……

我在家里使用各种操作系统,所有服务均由 Linux 提供,例如防火墙、路由、文件存储和 DLNA 媒体。不过,我也喜欢使用 Mac,我有一台 2009 年末的 MacBook Air,我旅行时会使用它。尽管 Lion 有种种缺陷,但我还是非常喜欢使用它 - 全屏应用程序、手势和新的 Mail.app 真的令人印象深刻。这台机器的规格真的没有什么特别之处,缺乏扩展确实有很多不足之处,但对于我所做的事情来说 - 已经足够了。当新款 Ivy Bridge MacBook Air 上市时,我肯定会升级到它,也许那时我的内存将超过 2GB,还可以运行 VM(!)。

我在 Lion 上使用这台机器时遇到的最大问题(在 Snow Leopard 上没有遇到)与 kernel_task 有关。不是将所有底层内核操作拆分成各自的进程(和相关线程),而是将它们全部由进程列表中出现的单个“任务”(更多是微内核架构基础的表示)使用。我注意到,这个“任务”有时会失控,以最高优先级消耗 CPU 资源。很长一段时间我都不确定它在做什么,当我做一些相对密集的事情(对于 Mac 来说)时,它似乎开始发挥作用,例如 YouTube。

很多人认为“流氓 kexts”(内核驱动程序/模块)可能导致了这个问题,也许 OS X 启动了一个不兼容的模块,这个模块是在系统运行 Snow Leopard 时安装的。这似乎很有道理,因为在安全模式下启动不会造成任何问题。我创建了一个 Lion Install-USB 并从头开始重新安装;猜猜怎么着……几个小时内又出现了同样的问题!经过一番挖掘和调查 kernel_task“进程”,很明显它正在不断地循环执行某些任务。经过进一步的研究,我发现内核会不断循环执行一些非常简单的任务,例如获取日期,因此会“消耗”(具有最高优先级)大部分 CPU 以冷却系统。

所以,这一切都与温度控制有关 - 您从其他应用程序中“移除”大部分 CPU 份额,并持续执行低开销任务,直到 CPU 温度下降。这听起来像是一种很好的冷却解决方案,但它非常具有侵入性。它的侵略性在很多方面使系统陷入停顿,尽管我的 MacBook Air 中的 CPU 很少超过 70 度(摄氏度)。考虑到我的小型 2.13GHz Core2Duo 的 TJ Max 是 85 度,我宁愿 kernel_task 不要采取这种侵入性行动。

值得庆幸的是,这个“功能”内置在 kext 中,其中每个型号标识符指定如何通过这种侵入性操作控制 CPU 的温度。简单的解决方法是从此 kext 中删除您的型号标识符的条目 - 如果它“不知道”如何处理您的特定型号,它将不会采取任何行动。现在,这里是免责声明……通过采取我将在下面概述的相同行动,我对您或您的财产造成的任何损害或损失绝对不承担任何责任,您是自愿这样做的。您正在推翻旨在延长设备寿命的功能,尽管它具有侵入性并且非常烦人,但它的存在是有原因的。无论如何,开始有趣的事情……

首先,你需要知道你的 Mac 的型号标识符:

> $ system_profiler -detailLevel mini | grep "Model Identifier:"
  Model Identifier: MacBookAir2,1 The kext we need to modify is IOPlatformPluginFamily.kext, you can verify it is running by-
sh-3.2# kextstat | grep IOPlatformPluginFamily

67    3 0xffffff7f81229000 0x7000     0x7000
com.apple.driver.IOPlatformPluginFamily (5.1.0d17) <8 7 6 5 4 3>

在此 kext 中将有另一个 kext-ACPI_SMC_PlatformPlugin.kext,其中列出了每个最近的 Macintosh 型号以及内核用来确定如何以及何时调用控件的相关指令。(请确保现在切换到 root)

sh-3.2# cd /System/Library/Extensions/IOPlatformPluginFamily.kext/
sh-3.2# cd Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/
sh-3.2# cd Contents/Resources/ sh-3.2# ls | wc -l 49

因此,截至撰写本文时,此 kext 中列出了 49 个不同的配置文件。我们只需将我们之前发现的型号标识符的“plist”文件移出该目录,因此在我的情况下,我需要将文件“MacBookAir2_1.plist”移出此目录(移到安全的地方),但将我的型号标识符替换为您的特定标识符。

sh-3.2# mv MacBookAir2_1.plist /Users/<your username>/

您现在只需重新启动即可使更改生效。我们可以删除整个 kext,但删除特定型号的 plist 文件更安全,因为(说实话)我不知道该内核模块的其余部分是做什么的。我已经使用这个“修复”几天了,没有发现任何问题 - 总的来说,它要快得多,我不必担心它会耗尽动力。我建议您在放置 Mac 时要多加小心,不要盖住排气管。如果 Mac 需要保护自己,它应该能够保护自己。达到最高温度,但我会更加小心一点。

注意:Apple 可能会在将来的更新包中更新此 kext,从而替换您删除/移动的文件,因此您可能需要在将来重复此过程 :-)

答案2

您需要查看活动监视器中的所有进程。在那里,您会看到占用大量 CPU 能力的系统进程。

如果您在 Apple Store 范围内,您可能希望让 Apple 对计算机进行诊断。

相关内容