Wie kann ich einen außer Kontrolle geratenen "kernel_task" -Prozess debuggen?

42

Erst kürzlich habe ich festgestellt, dass meine Akkulaufzeit erheblich gesunken ist und der "kernel_task" -Prozess ziemlich viel CPU verbraucht (konstante 1-6% auf meinem 2,8 GHz Dual-Core i7, 2010 MBP). Offensichtlich denke ich, dass die CPU-Auslastung von kernel_task zum Batterieverlust beiträgt, und ich muss herausfinden, warum.

Bei der Suche in Google scheint es, dass kernel_task die OS X-Version von "svchost.exe" von Windows ist - der notorische Alles-tun-Prozess, den Sie niemals wirklich debuggen können. Sie müssen lediglich die Schalter manuell umlegen, bis einer von ihnen funktioniert.

Gibt es eine Möglichkeit, wie ich der außer Kontrolle geratenen Aktivität von kernel_task leichter auf den Grund gehen kann? Ich habe keinen Neustart versucht, da das zugrunde liegende Problem dadurch nicht wirklich behoben wird.

Der Aktivitätsmonitor zeigt die CPU-Auslastung an. Wenn ich Inspect drücke, werden 77 Threads, 2 Ports, Stunden und Stunden an CPU-Zeit angezeigt, die Context Switches steigen um ungefähr 400 pro Sekunde und die Mach Messages In und Out steigen beide um ungefähr 6.000 pro Sekunde.

Wie kann ich diesen kernel_taskProzess irgendwie inspizieren oder überwachen und herausfinden, was diese ganze Kraft tatsächlich verbraucht?

(Hinweis: Meine aktuellen Verdächtigen sind das kürzlich veröffentlichte 10.6.7-Update, das Firefox-Update von 4 Beta 10 auf RC oder ScreenResX - all dies sind Dinge, die ich in letzter Zeit getan habe und die mir einfallen)

Ricket
quelle
Ich würde es nicht kernel_taskals außer Kontrolle beschreiben. Der Aktivitätsmonitor ist möglicherweise nicht das beste Dienstprogramm für Diagnosen in diesem Bereich. Fügen Sie in der Konsole Systemprotokollabfragen hinzu, um herauszufinden, wie die Kernel-Task verwendet wird. Verfeinern Sie dann die Eröffnungsfrage zu einer Frage, die möglicherweise leichter beantwortet werden kann.
Graham Perrin
1
Konstante 200% CPU klingt für jeden Prozess ziemlich unkontrolliert.
Twe4ked

Antworten:

12

Ich hatte eine ähnliche Frage zum Identifizieren von mit kernal_task verbundenen Dateien und Programmen mit dem folgenden Terminalbefehl:

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

Dadurch werden verschiedene Kexts und der damit verbundene Speicher angezeigt. Zum Beispiel 6184960 com.apple.driver.AirPort.Brcm4360ist es ein großes Problem für mich, aber ich kann nicht viel dagegen tun, wenn ich WLAN nutzen möchte.

Einer der Vorschläge, die ich erhalten habe, war, nachzuschlagen, ob alle nicht von Apple stammenden Kexts Speicher belegen, indem ich die obigen Anweisungen weiterleite grep -v com.apple. Möglicherweise verbrauchen einige Programme, die nicht von Apple stammen, Ihre Ressourcen. Sie sollten in der Lage sein, diese zu entfernen, ohne etwas zu beschädigen.

Die uralte Lösung ist natürlich, den Computer neu zu starten. Manchmal ist das alles, was erforderlich ist, um Prozesse auf die normale CPU-Auslastung zurückzusetzen.

intcreator
quelle
Wie lautet die Zahl in der ersten Spalte?
Anentropic
@Anentropic - versuchen Sie man kextstates und sehen Sie sich den awkBefehl an $4. Er sieht aus wie die Größe des Kext-Speichers. Sinnvoll in Anbetracht der Frage.
RebusB
11

Hier ist eine großartige Erklärung, was eine kernel_task ist. Dies können Treiber (kexts), Netzwerk- oder Festplattenaktivitäten sein. Sie können Instrumente nicht einfach zum Anhängen an den kernel_taskProzess verwenden.

Suchen Sie nach anderen Anzeichen wie Protokollen (Console.app), Datenträgeraktivität (zum Beispiel:) iotop fs_usage, Netzwerkaktivität (versuchen Sie, die Verbindung zum lokalen Netzwerk zu trennen, Geräte in den Netzwerkeinstellungen auszuschalten), und deinstallieren Sie die ( kextunload) Speichertreiber stammen von Drittanbietern - Tablets, USB 3G-Modems usw. Suchen Sie nach Anwendungen, die Kexts installieren

Stellen Sie außerdem sicher, dass Ihr Dateisystem nicht beschädigt ist, falls Sie kürzlich einen Absturz hatten. Führen Sie eine Überprüfung durch.

mspasov
quelle
1
Ich hatte ~ 200% CPU-Auslastung (2 von 4 Kernen) fast konstant, normalerweise nach einem Start beim Übertragen von Dateien oder ähnlichem, aber danach nicht wieder normal. Es stellte sich heraus, dass mein Systemvolume repariert werden musste. Sobald das erledigt war, kernel_taskwar wieder ein gesundes Aktivitätsniveau erreicht.
Daniel Beck
1
Der Link in der Antwort ist jetzt tot
Swader
1
@ Santa Vielen Dank für die vorgeschlagene Bearbeitung des Links, aber es macht keinen Sinn, den Link zu entfernen, wenn auf dem Wayback-Computer eine Version vorhanden ist. Ersetzen Sie den Link durch den Link zur Wayback-Maschine.
grg
8

Wie von @Christopher erwähnt, kann Hitze dazu führen, dass die CPU von kernel_task einen Spitzenwert erreicht. Der Grund ist in diesem Beitrag aufgeführt. „Beheben“ von kernel_task-CPU-Problemen in MacOS Lion 10.7 . Anscheinend nimmt die Datei ACPI_SMC_PlatformPlugin.kext beim Aufheizen der CPU CPU-Zyklen in Anspruch, um die tatsächliche CPU-Auslastung zu verringern.

Eine Lösung besteht darin, Ihren Mac (z. B. Lüfter) über einen externen Lüfter oder etwas wie SMCFanControl abzukühlen .

Der Artikel gibt eine andere Lösung, die darin besteht, den Unterkext zu entfernen, der dieses Verhalten auslöst. Obwohl ich zugeben muss, bin ich mir persönlich nicht sicher, wie sicher es ist, dieses Verhalten auszuschalten.

Studgeek
quelle
2
Ich gehe davon aus, dass dies der Grund ist, warum die Mehrheit von kernel_task eine anhaltend hohe CPU-Auslastung erzielt. Jedes Mal, wenn es für mich passierte, benutze ich meine Maschine ziemlich stark und es begann zu verzögern, aber keiner der offensichtlichen Prozesse, die ich benutzte, verursachte die Spitze, nur kernel_task. Fahren Sie die schweren Prozesse herunter (normalerweise Videos oder Spiele), und irgendwann verschwindet sie. In der Zwischenzeit klingt mein 2011er MBP so, als würde er abheben! Knackte es auf und gab es eine gute Reinigung, entfernte die Staubdecken auf den Kühlkörpern und ich war wieder im Geschäft mit niedrigen Lüfter und keine kernel_task verrückt.
Joey T
5

kernel_taskIst normalerweise außer Kontrolle, wenn einige andere Prozesse Systemaufrufe oder Ressourcen (Speicher- oder Festplatten-E / A-Ereignisse) überlasten.

In diesem Fall können Sie das fs_usageBerichterstellungsdienstprogramm verwenden, das Ihnen in Echtzeit Systemaufrufe und Seitenfehler im Zusammenhang mit der Dateisystemaktivität anzeigt.

Führen Sie diesen Befehl in Terminal aus:

sudo fs_usage

Beobachten Sie dann, welche Prozesse einige Systemaufrufe häufig ausführen, und erwägen Sie, sie zu schließen / zu beenden, wenn Sie sie nicht verwenden.

Weitere Informationen finden Sie in der Spalte TIME INTERVAL (Zeitintervall) , in der die für den Systemaufruf verstrichene Zeit angegeben ist. Ein Wnach Ablauf der Zeit erscheinendes Symbol zeigt an, dass die Aktivität für den Prozess geplant wurde (in diesem Fall enthält die verstrichene Zeit die Wartezeit).

Führen Sie zum Filtern der Prozesse, die in den Systemaufrufen das meiste Zeitintervall verwenden, Folgendes aus:

sudo fs_usage | grep -v 0.0000

Hier sehen Sie in der letzten Spalte die hungrigsten Prozesse (in Bezug auf die Kernel-Zeit). Sie können die Anzahl der Nullen für die Genauigkeit anpassen (weniger angezeigte Nullen, mehr Zeitaufwand).

Weitere Ideen finden Sie auch unter: Wie kann die Auslastung des Taskspeichers im Kernel untersucht werden?


Hier sind die häufigsten Probleme:

Kenorb
quelle
2
Gut ein vernünftiger Output-Stream nach dem Herausfiltern von iTerm2 und sich grepselbst:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra
4

Ich hatte einen massiven Anstieg in der CPU-Auslastung von kernel_task und es stellte sich heraus, dass mein CPU-Lüfter teilweise nicht angeschlossen war. kernel_task hat etwas mit dem Drosseln der CPU zu tun, wenn es zu heiß wird. In Ihrem Fall ist Ihr Lüfter möglicherweise nur mit Müll und Staub verklebt und muss gereinigt werden.

Christopher
quelle
Das ist verrückt! Haben Sie beim Debuggen jemals Ihre Protokolle überprüft? Wie sind Sie zu dieser Lösung gekommen?
Ricket
3

Ich hatte das gleiche Problem in Yosemite, aber dank dieser guten Seele, die auf diesem anderen guten Kerl beruhte, konnte ich es lösen. Ich kann immer noch nicht verstehen, was passiert ist, aber nachdem ich ein ganzes Wochenende damit verbracht habe, es zu klären, habe ich einfach aufgegeben und befolge blind seine Anweisungen. Schau dir meine Verzweiflung im Aktivitätsmonitor an:

Ihre gesamte CPU gehört uns

Seien Sie vorsichtig, machen Sie immer zuerst ein Backup und lesen Sie die bereitgestellten Links zur Erklärung. Ich übernehme keinerlei Verantwortung für etwaige Schäden. Du wurdest gewarnt.

Finde das Modell

$ system_profiler -detailLevel mini | grep "Model Identifier:"

Modellbezeichnung: MacBookPro8,2

Verschieben und sichern Sie die Datei

$ mkdir -p ~ / backup

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources

$ sudo mv MacBookPro8_2.plist ~ / backup /

Jemand verwendet Sie immer noch MS-DOS
quelle
1
Diese Lösung hat bei mir funktioniert. Ich habe die gleiche MacBookPro-Version. Leider müssen Funktionen deaktiviert werden, um die Lebensdauer der Maschine zu verlängern. Ich habe die CPU - Temp - und Lüfterfunktionalität überprüft und es scheint normal zu sein. Daher gehe ich davon aus, dass es einen Fehler in dieser Funktionalität gibt. Ich konnte jedoch immer noch nicht herausfinden, warum die CPU - Kühlung fehlersicher ausgelöst wurde (manchmal von bevor Sie sich einloggen, ohne Ende).
errant.info
@ errant.info aus irgendeinem Grund El Captain hat es gelöst. Mein Mac war ebenfalls mit einem defekten Akku ausgestattet, und ich habe mit El Captain gewechselt. Ich weiß also nicht, welche Aktion tatsächlich behoben wurde. Viel Glück mit deinem Mac!
Jemand verwendet Sie immer noch MS-DOS
2

Ich bin mit einem neuen 2011er MacBook Pro auf OSX Lion und hatte vor kurzem kernel_task, das ungefähr 25-30% der CPU und meines Lüfters für Stunden und Stunden mit maximaler Geschwindigkeit laufen ließ. Ich habe eine Sache nach der anderen ausprobiert und gelöst, indem ich 5 oder 6 Fenster in der Finder-App geschlossen habe. Ich kann nicht sagen, warum, aber es war klar, dass.

Jameson Quinn
quelle
2
Haben Sie Erweiterungen für Finder installiert? Zum Beispiel Programme, die der Symbolleiste oder dem Kontextmenü etwas hinzufügen?
Ricket
1
Dies liegt daran, dass in einem oder mehreren Ihrer Fenster das Kontrollkästchen "Alle Größen anzeigen" in der Konfiguration "Ansicht-> Ansichtsoptionen anzeigen" aktiviert ist. Deaktivieren Sie dieses Kontrollkästchen und legen Sie es als Standard für alle Ordner fest.
Brian Topping
2

Auf meinem Mac ist die CPU-Auslastung von kernel_task proportional zur von mir genutzten Internetbandbreite und reicht von etwa 0% bis 50%. Dies liegt wahrscheinlich an den Treibern für mein Huawei 3G-Modem (HuaweiDataCardDriver.kext).

Sie können versuchen, die Kernel-Erweiterungen zu deaktivieren. Es ist nicht erforderlich, kextunload zu verwenden: Es ist sicher, die kext-Bundles einfach aus / System / Library / Extensions / in einen anderen Ordner zu verschieben und neu zu starten. Sie können Consultant's Canary verwenden oder kextstat | grep -v com.appleKernel-Erweiterungen auflisten, die nicht mit OS X geliefert wurden.

Lri
quelle
1

Im Folgenden finden Sie einige nützliche Befehle, mit denen Sie Probleme mit kernel_task außerhalb der Kontrolle beheben können:

  • Profilieren Sie das gesamte System und konzentrieren Sie sich dabei auf den Kernelprozess (PID: 0). Führen Sie Folgendes aus:

    sudo spindump 0 -reveal
    

    launchdVerwenden Sie für bestimmte Prozesse (wie ) samplez sudo sample launchd. B. oder per PID.

  • Um den Speicherverbrauch nach Kernel-Task zu erfassen, verwenden Sie (standardmäßig nach Dirty sortiert):

    sudo footprint 0
    

    Hinweis: Verwenden Sie diese Option -a, um alle Prozesse als Ziel festzulegen.

  • Um systemweite Diagnose - Informationen von mehreren utils zu sammeln, führen: sudo sysdiagnose.

    Dies kann auch durch Drücken von Shift- Control- - -. (Punkt) ausgelöst werden .

    Der Bildschirm sollte beim Start blinken und einige Minuten warten, bis die Datei im Finder angezeigt wird .

    Siehe: Wie erhalten Sie Systemdiagnosedateien von OS X?

    Dann entpacken und überprüfen Sie die Dateien wie footprint*.txt, spindump.txt, taskinfo.txt, bc_stats.txtund andere.

  • Überprüfen Sie die vm.swapusageKernelzustände, z sysctl -a | grep ^vm.swapusage.

    Grundsätzlich gilt: Je mehr Auslagerungsdateien Sie verwenden (überprüfen Sie die Auslagerungsdateien, von /private/var/vmdenen verwaltet wird dynamic_pager, siehe :), destoman dynamic_pager mehr Probleme bereitet der Kernel aufgrund von Swapins / Swapouts- Vorgängen (siehe man vm_statund man fs_usage) mit der Leistung . Führen Sie zum Testen Folgendes aus:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    Hinweis: Hit Control- Czu stoppen.

Kenorb
quelle
0

Für mich hatte ich einen Prozess (Netbeans in diesem Fall, der eine Datei mit 20 GB liest) und er würde 80% CPU für Netbeans und 20% CPU für kernel_task verwenden (sehr verdächtig). Dadurch lief mein gesamtes System wie Teer.

Ebenfalls verdächtig ist, dass "Menumeter" viel "sys" -Zeit pro CPU melden würden. Sie können dies auch im Befehl "top" sehen, wieCPU usage: 21.40% user, 23.74% sys

Später könnten es Netbeans mit 120% CPU sein, kernel_task mit 65%, aber trotzdem waren sie beide "hohe CPU zur gleichen Zeit"

sudo fs_usage zeigte viel davon:

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

Meine Theorie besagt, dass Netbeans so viel "gelesen" hat, dass Seitenfehler sogar dazu führten, dass ein eigenes Programm ausgeführt wurde (dh, es wurde gesendet, um das eigene Programm auszutauschen), sodass eine Warteschlange hinter dem Seitenfehlersystem erstellt wurde. Und wahrscheinlich tauschen Sie auch "andere Programme" aus, damit das gesamte System inaktiv wird.

Mit topwurde die FAULT-Spalte ebenfalls um 70 K / s erhöht.

Rogerdpack
quelle
0

Mein MacBook Pro war fast unbrauchbar, weil kernel_task wochenlang überlastet war. Gleichzeitig wurde der Akku aufgepumpt und ich entschied mich schließlich, das Apple Center in Rom aufzusuchen, um ihn zu ersetzen ... auch wenn die Garantie abgelaufen ist auch Tastatur) für 0 € kosten. Noch besser ... kernel_task Problem verschwindet plötzlich !!! Ich bin mir also ziemlich sicher, dass es direkt oder indirekt an der Batterie lag

Luca Rocchi
quelle