如何调试失控的“ kernel_task”进程?


42

就在最近,我注意到我的电池寿命大幅下降,并且“ kernel_task”进程使用了​​大量的CPU(在我的2.8ghz双核i7、2010 MBP上恒定为1-6%)。显然,我认为kernel_task的CPU使用率是导致电池电量下降的原因,我需要找出原因。

在Google上搜索时,似乎kernel_task是OS X的Windows“ svchost.exe”版本-臭名昭著的无所不能的过程,您无法真正调试,您必须手动翻转开关,直到其中一个起作用为止。

有什么方法可以让我更轻松地了解失控的kernel_task活动的底部?我没有尝试过重新启动,因为如果它能够“修复”它,则它并不能真正解决潜在的问题。

活动监视器显示CPU使用率。当我点击Inspect时,它显示77个线程,2个端口,数小时的CPU时间,Context Switch每秒增加约400个,Mach Messages In和Out每秒增加约6,000个。

我如何才能以某种方式检查或监视此kernel_task过程,并弄清使用这些功能的实际作用?

(注意:我目前的怀疑对象是最近的10.6.7更新,Firefox从4 beta 10更新到RC或ScreenResX-这些是我最近想到的所有内容)


我不会形容kernel_task为失控。活动监视器可能不是该区域诊断的最佳工具。在控制台中,添加系统日志查询,以帮助您确定使用内核任务的方式。然后将开头的问题细化为可能更容易回答的问题。
格雷厄姆·佩林

1
对于任何进程,恒定的200%CPU声音听起来都是无法控制的。
twe4ked

Answers:


12

我有一个类似的问题,关于如何使用以下终端命令识别连接到kernal_task的文件和程序:

kextstat -l -k | awk '{n = sprintf("%d", $4); print n, $6}' | sort -n

这将显示各种kext和与之关联的内存。例如,6184960 com.apple.driver.AirPort.Brcm4360对于我来说,这是一个很大的麻烦,但是如果我想使用wifi,就不能做太多事情。

我收到的建议之一是通过将上述内容传递给来查找所有非Apple kext正在占用内存的内存grep -v com.apple。某些非Apple程序可能会耗尽您的资源。您应该能够删除这些文件而不会破坏任何内容。

当然,古老的解决方案是重新启动计算机。有时,只需要将进程设置回其正常的CPU使用水平即可。


第一栏中的数字是多少?
Anentropic

@Anentropic-try man kextstat,看着它和awk命令抓取$4,看起来像kext内存使用的大小。考虑这个问题是有道理的。
rebusB

11

这是一个很好的解释,什么是kernel_task。可能是驱动程序(kexts),网络或磁盘活动。您不能简单地使用Instruments附加到kernel_task流程。

寻找其他迹象,例如日志(Console.app),磁盘活动(例如:)iotop fs_usage,网络活动(尝试与本地网络断开连接,关闭网络首选项中的设备),尝试从内存kextunload驱动程序中进行卸载/删除()。来自第三方-平板电脑,USB 3G调制解调器等。检查正在安装Kexts的应用程序

另外,如果最近发生了崩溃,请确保文件系统没有损坏-请进行检查。


1
我几乎一直有200%的CPU使用率(4个核中的2个),通常是在启动后在传输文件或类似内容时启动,但之后没有恢复正常。原来是我的系统卷需要维修。一旦完成,将kernel_task恢复到理智的活动水平。
Daniel Beck 2012年

1
答案中的链接现在已经失效
Swader

1
@Santa感谢您对链接的建议编辑,但是当Wayback Machine上存在版本时,删除链接是没有意义的。将链接替换为与Wayback Machine的链接。
grg

8

如@Christopher所提到的,热量会导致kernel_task CPU峰值。原因在此帖子中列出了“修复” MacOS Lion 10.7中的kernel_task CPU问题。显然,当CPU变热时,ACPI_SMC_PlatformPlugin.kext将占用CPU周期以尝试减少实际的CPU负载。

因此,一种解决方案是通过外部风扇或诸如SMCFanControl之类的设备来冷却Mac(例如风扇)。

本文提供了另一个解决方案,即删除触发该行为的子程序。尽管我必须承认,我个人不确定关闭该行为的安全性。


2
我要冒一个危险,那就是这是大多数kernel_task导致CPU使用率持续升高的原因。每次发生对我来说,我都在大量使用我的机器,并且它会开始滞后,但是我使用的任何显而易见的进程都没有导致峰值,只是kernel_task。关闭繁琐的过程(通常是视频或游戏),最后它消失了。同时,我的2011 MBP听起来像即将开始!打开它并给它一个良好的清洁,除去散热器上的灰尘,然后我以低风扇又没有kernel_task疯狂的状态重新开始工作。
Joey T

5

kernel_task当某些其他进程过度使用系统调用或资源(内存或磁盘I / O事件)时,通常会失控。

发生这种情况时,您可以使用fs_usage报告实用程序,该实用程序将实时显示与文件系统活动相关的系统调用和页面错误。

因此,在终端中运行以下命令:

sudo fs_usage

然后观察哪些进程经常执行一些系统调用,如果您不使用它们,请考虑关闭/杀死它们。

更具体地说,请检查“ 时间间隔”列,该列为您提供了在系统调用中花费的经过时间。一W出现后的时间指示过程中调出活动(在这种情况下,经过的时间包括等待时间)。

因此,为了过滤系统调用中使用时间最多的进程,请运行:

sudo fs_usage | grep -v 0.0000

这将在最后一栏中显示最耗时的进程(就内核时间而言)。您可以调整零的数量以提高精度(显示更少的零,花费更多的时间)。

有关更多想法,还请检查:如何调查内核任务内​​存使用率过高?


以下是最常见的问题:


2
在滤除iTerm2及其grep本身之后,提供了一个合理的输出流:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra,

4

我的kernel_task CPU使用率大幅上升,事实证明我的CPU风扇已部分拔掉。kernel_task与CPU过热时的节流有关。在您的情况下,也许您的风扇只是被垃圾和灰尘所粘,需要清理。


太疯狂了!调试时是否检查过日志?您是如何找到该解决方案的?
Ricket 2012年

3

我在优胜美地也遇到了同样的问题,但是由于有了这个善良的灵魂,我可以解决这个另一个好伙伴。我仍然不明白发生了什么,但是在失去了整个周末的努力后,我只是放弃了,盲目地遵循了他的指示。看看我对活动监视器的绝望:

您所有的CPU都属于我们

注意,请务必先进行备份,并阅读提供的链接以获取解释。对于造成的任何损害,我概不负责。您已被警告。

查找模型

$ system_profiler -detailLevel mini | grep“模型标识符:”

型号标识符:MacBookPro8,2

移动并备份文件

$ mkdir -p〜/备份

$ cd /系统/库/扩展/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/资源

$ sudo mv MacBookPro8_2.plist〜/ backup /


1
这个解决方案对我有用。我有相同的MacBookPro版本。不幸的是,它涉及禁用旨在增加机器寿命的功能。我已经检查了CPU的温度和风扇功能,而且看起来很正常,因此我认为此功能存在错误,但是我仍然无法深入了解为什么触发了CPU冷却故障保险(有时在登录之前,一直没有结束)。
errant.info,2016年

@ errant.info由于El Captain解决了某些原因。我的mac机电池也有故障,我更换了El Captain,所以不知道实际上该怎么做。Mac祝您好运!
有人仍在使用您的MS-DOS

2

我使用的是2011年新款Macbook Pro,在OSX Lion上运行,最近我的kernel_task运行约25%至30%的CPU,并且风扇以最大速度旋转数小时。我一次尝试了一件事情,解决的问题是...在Finder应用程序中关闭5或6个窗口。不能说我理解为什么,但是很明显。


2
您是否安装了Finder的任何扩展程序?例如,向工具栏或右键单击(上下文)菜单添加内容的程序?
莉吉特

1
这是因为一个或多个您的Windows必须在“查看- >显示视图选项”配置它们关掉启用了“显示所有大小”复选框,然后设置为默认所有文件夹,它会停止。
布莱恩摘心

2

在我的Mac上,kernel_task的CPU使用与我使用的Internet带宽成正比,范围从0%到50%。这可能是由我的华为3G调制解调器(HuaweiDataCardDriver.kext)的驱动程序引起的。

您可以尝试禁用内核扩展。无需使用kextunload:将kext捆绑包从/ System / Library / Extensions /移至其他文件夹并重新启动是安全的。您可以使用Consultant的Canarykextstat | grep -v com.apple列出OS X随附的内核扩展。


1

要专门对失控的kernel_task进行故障排除,以下是一些有用的命令:

  • 对整个系统进行概要分析,重点关注内核进程(PID:0),运行:

    sudo spindump 0 -reveal
    

    对于特定过程(如launchd),请使用sample,例如sudo sample launchd或通过PID进行。

  • 要按内核任务收集内存消耗,请使用(默认情况下按脏排序):

    sudo footprint 0
    

    注意:-a用于定位所有过程。

  • 要从多个工具收集系统范围的诊断信息,请运行:sudo sysdiagnose

    这可以通过敲击也触发Shift- - Control- - .周期)。

    您应该看到启动时屏幕闪烁,然后等待几分钟,直到Finder中显示该文件。

    请参阅:如何从OS X获取系统诊断文件?

    然后解压缩和检查,如文件footprint*.txtspindump.txttaskinfo.txtbc_stats.txt等。

  • vm.swapusage入内核状态,例如sysctl -a | grep ^vm.swapusage

    基本上,您使用的交换量更多(请查看由/private/var/vm管理的交换文件dynamic_pager,请参阅:),man dynamic_pager由于Swapins / Swapouts操作(请参阅man vm_statman fs_usage),内核在性能上的挣扎也更多。要测试,请运行:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    注意:按Control- C停止。


0

对我来说,我有一个进程(在本例中为Netbeans,它正在读取20GB的文件),对于netbeans,它将使用80%的cpu,对于kernel_task将使用20%的cpu(非常可疑)。这导致我的整个系统像tar一样运行。

同样令人怀疑的是,每个CPU“菜单”会报告很多“ sys”时间。您也可以在“ top”命令中看到此内容,例如CPU usage: 21.40% user, 23.74% sys

后来,可能是netbeans 120%cpu,kernel_task 65%,但是无论如何它们都是“同时具有很高的cpu”

sudo fs_usage 显示了很多这样的:

12:46:34.446367  PAGE_IN_FILE      A=0x093a5bb000       0.000001   java.453214

我的理论是,netbeans“读取的内容太多”,甚至导致页面错误甚至无法运行其自己的程序(即发送出去以交换其自己的程序),因此在页面错误系统后面排起了长队。可能还需要交换“其他程序”以进行交换,从而导致整个系统变慢。

使用top,FAULT列也以每秒70K的速度增加。


0

我的macbook Pro几乎无法使用,因为kernel_task的CPU占用了数周的时间。同时,电池膨胀了,所以我终于决定去罗马的Apple Center更换它……即使在保修期内,Apple更换了我的电池(并且键盘),费用为0欧元。更好的是... kernel_task问题突然消失了!所以我很确定那是直接或间接地由于电池

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.