Wie kann man die Auslastung des Taskspeichers im Kernel untersuchen?

131

Ich habe meinen MBP (mit 16 GB RAM) wie gewohnt verwendet und aus heiterem Himmel habe ich dieses Popup angezeigt:

Auf Ihrem System ist kein Anwendungsspeicher mehr verfügbar.

Beenden Sie alle Anwendungen, die Sie nicht verwenden, um Probleme mit Ihrem Computer zu vermeiden.

Beenden von Anwendungen erzwingen - Auf Ihrem System ist kein Anwendungsspeicher mehr verfügbar - Screenshot

Ich habe offensichtlich einige geschlossen, die ich konnte, aber es hat nicht geholfen.

Nach der Überprüfung des Speichers hat der Kernel-Task anscheinend 7 GB und 22,36 GB Swap-Speicher mit insgesamt 23 GB (was offensichtlich der Fall war) verbraucht. Allerdings habe ich immer noch 20 GB freien Speicherplatz auf meiner SDD.

Speicher - iStat-Menüs - Screenshot

Activity Monitor hat nicht viel geholfen, als mein OS X auf die Zerstörung zusteuerte.

Process Explorer

kernel_task - Registerkarte Speicher - Screenshot kernel_task - Registerkarte "Statistik" - Screenshot

Meine topStatistiken vor dem Einfrieren meines Kernels:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

Am Ende war mein OS X eingefroren und ich musste einen Hard-Reset durchführen, mein SDD im Wiederherstellungsmodus reparieren und anschließend reparieren (verlorene Arbeit wiederherstellen, Anwendungskonflikte beheben, meinen Fundsachenordner überprüfen, Chrome / Terminal-Tabs verschwunden, Kopfschmerzen usw.). ).

Meine Frage ist, wie überprüfe ich, ob die Kernel-Task viel Speicher belegt oder wie ich mit einer solchen Situation richtig umgehe? Ich habe versucht, mit Activity Monitor eine Probe zu nehmen, diese ist jedoch ausgegraut.


Meine MBR-Details: 2,3 GHz Intel Core i7 (Ende 2013) mit 16 GB RAM. OS X: 10.9.5

Kenorb
quelle
1
@klanomath Normalerweise habe ich viele Einfrierungen, besonders bei langer Betriebszeit, und dies sind nur Kernel-Einfrierungen aus unbekannten Gründen (mein MBR ist ziemlich neu). Dies ist jedoch das erste Popup, bei dem mir der Arbeitsspeicher ausgeht (mit 16 GB RAM und 50 GB freiem Speicherplatz). Meine Hauptfrage ist jedoch, wie ich die Speichernutzung von Kernel-Tasks untersuchen kann. Wenn sie also reproduzierbar sind, sollte dies nicht relevant sein.
Kenorb
5
Verwenden Sie zprint -t(Lion) oder sudo zprint -t(Mountain Lion und höher).
Klanomath
1
Sie haben Recht mit der Irrelevanz der Reproduzierbarkeit in Bezug auf Ihre Frage im Titel, aber es könnte für die Lösung Ihres Problems relevant sein.
klanomath
1
Würde es Ihnen etwas ausmachen, die Ausgabe zu Ihrer Frage hinzuzufügen (oder sie in Ihren Dokumenten zu speichern)? Nur zum späteren Nachschlagen / um es mit einem Zprint vergleichen zu können, der in einem kritischeren Systemzustand erstellt wurde. IMHO ist es ein Pechleck. Wenn du es postest, kann ich dir vielleicht mehr erzählen.
klanomath
1
Ich habe auf einmal das gleiche Problem. Ich bin mir ziemlich sicher, dass es mit Docker für Mac oder Hyperkit zusammenhängt. Sobald ich Docker für Mac stoppe, fängt kernal_task an, 10 GB + Speicher zu essen
Charlie Martin

Antworten:

176

Es gibt viele Dinge, die bei der Verwendung hoher Kernel-Aufgaben schief gehen. Normalerweise hängt dies mit einem fehlerhaften oder schweren Prozess zusammen, der die Systemressourcen überlastet (z. B. Indizierung von Speicher, Ausführen von VMs, zu viele Registerkarten im Webbrowser oder einige andere Hintergrundprozesse).

Im Folgenden finden Sie einige Methoden, mit denen Sie Probleme bei der Verwendung des OS X-Kernels untersuchen können:

Grundlegende Methoden

  • Führen Console.appSie " Alle Nachrichten " aus und überprüfen Sie, ob gerade etwas Ungewöhnliches passiert.
  • Verwenden Sie den Aktivitätsmonitor , um den Systemspeicher zu lesen und festzustellen, wie viel CPU, RAM und Festplatte verwendet werden.

    Alternativ können Sie das Programm auchtop im Terminal ausführen und gedrückt halten Space, um die Aktualisierung zu starten . Auf diese Weise können Sie die Ursache des Problems leichter ermitteln ( Swapins / Swapouts / Festplatten ?).

  • Führensudo fs_usage Sie in Terminal - Systemaufrufe und Seitenfehler zu berichten bezogenen Aktivitäten in Echtzeit Dateisystem (Ich denke , das ist die beste Option von allen anderen). Dann drücke Control- Cum es zu stoppen.

    Maßnahme: Erwägen Sie, Apps zu beenden, die häufig in der Liste angezeigt werden, aber Sie verwenden sie nicht.

    Weitere Informationen finden Sie unter: Wie kann ich einen außer Kontrolle geratenen "kernel_task" -Prozess debuggen?

  • Rennesudo syscallbypid.d (oder syscallbyproc.d), warte ein bisschen, drücke Control- C. Überprüfen Sie nun, welcher Prozess in der angegebenen Zeit die meisten Systemaufrufe generiert hat (letzte Spalte), und ziehen Sie in Betracht, ihn zu beenden, wenn Sie ihn erkennen. Wenn nicht, Google es und erfahren Sie mehr darüber.

Fortgeschrittene Methoden

  • Verwenden Sie den sysdiagnoseBefehl (kann durch Drücken von Shift- Control- - - .(Punkt) ausgelöst werden ), um schnell systemweite Diagnoseinformationen zu erhalten, die bei der Untersuchung von Systemspeicher- / Leistungsproblemen hilfreich sind (in angezeigt werden /var/tmp). Versuchen Sie während der Analyse, dies nicht zu tun Wenn Sie fertig sind, können Sie die generierte Datei dekomprimieren und die Protokolle analysieren.

    Siehe: Wie erhalten Sie Systemdiagnosedateien von OS X?

  • Führen Sie diesen Befehl aus footprint, um detaillierte Speicherinformationen auf der Ebene der einzelnen VM-Regionen und vertauschte Bytes zu erfassen:

    sudo footprint -a
    

    Ältere Version:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Verwenden Sie spindumpdiese Option, um das gesamte System zu profilieren, und generieren Sie eine /tmp/spindump.txtDatei (einschließlich des Kernels und seiner Erweiterungen).

  • Verwenden Sie vm_statdiese Option , um Statistiken zum virtuellen Speicher anzuzeigen. Z.B

    vm_stat 1 # to display every second.
    
  • Verwenden Sie zprintdiese Option , um Informationen zur Kernel- Nutzung zu überprüfen. Dies ist möglich durch:

    sudo zprint -t -s | head -n20
    

    Es werden die am meisten verschwendeten Kernelzonen angezeigt.

  • Verwenden Sie newproc.ddiese Option, um neue Prozesse creatbyproc.dfür Dateien zu überwachen, während diese ausgeführt werden:

    sudo newproc.d
    sudo creatbyproc.d
    

    Hinweis: Unter neueren OS X-Versionen (10.11 oder höher) funktioniert dies möglicherweise nicht, wenn der Integritätsschutz aktiviert ist (überprüfen durch csrutil status).

  • Try sar- System Activity Reporter, mit dem verschiedene vom Betriebssystem verwaltete kumulative Statistikzähler erfasst und gemeldet werden können.

Weitere nützliche Debugging-Tools finden Sie unter dtrace scripts ( grep dtrace /usr/bin/*). Wenn Sie den fehlerhaften Prozess kennen, der das Problem verursacht, können Sie ihn dtrusszum Debuggen verwenden.


Aktionen

Hier sind einige Vorschläge, die Ihnen bei Problemen mit dem Betriebssystem helfen können.

  • Geben Sie inaktiven Speicher frei. Dazu müssen Sie zuerst den Cache leeren und erzwingen, dass der Festplatten-Cache gelöscht wird:

    sync && sudo purge
    

    sync - Beendigung ausstehender Schreibvorgänge erzwingen (Cache leeren)

    purge - erzwingen, dass der Festplatten-Cache geleert (geleert und geleert) wird

    Seine Funktion besteht im Wesentlichen darin, alle ausstehenden E / A-Vorgänge zu beenden, die den Festplatten-Cache verwenden, und dann den gesamten belegten Festplatten-Cache freizugeben, sodass Speicherplatz frei wird, um das Auslagern und Auslagern des Hauptspeichers zu vereinfachen. Die Verwendung ist sicher, da anonymer Speicher, der über malloc, vm_allocate usw. zugewiesen wurde, nicht betroffen ist.

  • Verwenden Sie einige Apps von Drittanbietern , um überlasteten Speicher wie iBoostUp , SystemPal usw. zu beseitigen .

  • Sie können auch temporäres Spotlight deaktivieren:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    Und erwägen Sie andere Dienstleistungen von:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Beenden Sie Ihren Webbrowser und prüfen Sie, ob dies hilft. Beispielsweise ist die Verwendung von Chrome sehr einfallsreich, insbesondere wenn im Hintergrund Front-End-Prozesse ausgeführt werden (z. B. Javascript) oder werbeartige Animationen den Inhalt ständig rendern.

Kenorb
quelle
1
Spotlight wird immer wieder angezeigt, aber ich benutze es nicht und jedes Mal, wenn ich es töte, erscheint es im nächsten Moment wieder ... Wie / soll ich es loswerden?
ling
1
@ling Ich würde vorschlagen, dass Sie dann eine andere Frage stellen, da dies mit einem hohen Kernel-Task-Speicher zusammenhängt, nicht mit einem Spotlight-spezifischen.
Kenorb
2
seufz ich habe 4 GB RAM auf meinem Mac und erst vor kurzem stieg die Kernel-Aufgabe auf 3,1 GB und fror im Grunde meinen gesamten Computer ein. Ich habe meinen Google Drive-Tab geschlossen und er ist auf 950 MB
gesunken
3
Nicht spezifisch genug, um das kernel_taskProblem der hohen Speicher- und CPU-Auslastung tatsächlich zu lösen .
Hyiltiz
6

Ich hatte ein sehr ähnliches Problem, nachdem ich meinen LCD-Bildschirm auf einem iMac Ende 2012 ausgetauscht hatte. Der Lüfter lief mit hoher Drehzahl und hatte eine hohe CPU-Kernel_task-Auslastung. Ich habe es auf einen Temperatursensor eingegrenzt, den Sie vom alten LCD-Bildschirm auf den neuen Ersatzbildschirm verschieben müssen. Wenn Sie dies vergessen, werden die CPU-Geschwindigkeit und die Kernel_task beeinträchtigt, wodurch Ihr System verlangsamt wird.

fern10
quelle