Jak debugować niekontrolowany proces „kernel_task”?

42

Niedawno zauważyłem, że mój czas pracy baterii jest dość znaczny, a proces „kernel_task” z dużą ilością procesora (stały 1-6% na moim dwurdzeniowym procesorze 2,7 GHz i7, 2010). Oczywiście myślę, że użycie procesora przez jądro_task przyczynia się do spadku baterii i muszę dowiedzieć się, dlaczego.

Przeszukując Google, wydaje się, że kernel_task jest wersją „svchost.exe” systemu Windows X - notorycznym procesem wykonywania wszystkiego, czego nigdy nie można naprawdę debugować, wystarczy ręcznie przerzucić przełączniki, aż jeden z nich zadziała.

Czy jest jakiś sposób, aby łatwiej dostać się na dół poza kontrolą kernel_task? Nie próbowałem restartu, ponieważ jeśli to „naprawi” to, to tak naprawdę nie naprawia podstawowego problemu.

Monitor aktywności pokazuje użycie procesora. Kiedy nacisnę przycisk Inspect, wyświetla 77 wątków, 2 porty, godziny i godziny pracy procesora, przełączniki kontekstowe zwiększają się o około 400 na sekundę, a Mach Messages In i Out zwiększają się o około 6000 na sekundę.

Jak mogę w jakiś sposób sprawdzić lub monitorować ten kernel_taskproces i dowiedzieć się, co faktycznie wykorzystuje całą tę moc?

(uwaga: moimi obecnymi podejrzanymi są najnowsza aktualizacja 10.6.7, aktualizacja Firefoksa z 4 wersji beta 10 do wersji RC lub ScreenResX - to wszystko, co ostatnio zrobiłem, o czym mogę pomyśleć)

Ricket
źródło
Nie nazwałbym kernel_tasktego niekontrolowanym. Monitor aktywności może nie być najlepszym narzędziem do diagnozowania w tym obszarze. W konsoli dodaj zapytania do dziennika systemu, aby pomóc ci określić, w jaki sposób używane jest zadanie jądra; następnie dopracuj pytanie wstępne do pytania, na które można łatwiej odpowiedzieć.
Graham Perrin
1
Stały 200% procesor brzmi zupełnie poza kontrolą dla każdego procesu.
twe4ked 21.10.12

Odpowiedzi:

12

Miałem podobne pytanie o to, jak zidentyfikować pliki i programy podłączone do kernal_task za pomocą następującego polecenia terminala:

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

Spowoduje to wyświetlenie różnych tekstów i związanej z nimi pamięci. Na przykład, 6184960 com.apple.driver.AirPort.Brcm4360to dla mnie duży świnia, ale nie mogę nic na to poradzić, jeśli chcę korzystać z Wi-Fi.

Jedną z sugestii, które otrzymałem, było sprawdzenie, czy kext-y inne niż Apple zajmują pamięć, przesyłając powyższe grep -v com.apple. Możliwe, że niektóre programy inne niż Apple zużywają twoje zasoby. Powinieneś być w stanie usunąć je bez niszczenia czegokolwiek.

Odwiecznym rozwiązaniem jest oczywiście ponowne uruchomienie komputera. Czasami to wszystko, czego potrzeba, aby przywrócić procesy do normalnego poziomu wykorzystania procesora.

intcreator
źródło
jaka jest liczba w pierwszej kolumnie?
Anentropic,
@Anentropic - spróbuj man kextstat, patrząc na to i awkchwytając komendę $4, wygląda jak rozmiar użycia pamięci kext. Rozważanie pytania ma sens.
rebusB,
11

Oto świetne wyjaśnienie, czym jest zadanie jądra. Mogą to być sterowniki (kexts), aktywność sieciowa lub dyskowa. Nie można po prostu użyć instrumentów, aby dołączyć się do kernel_taskprocesu.

Poszukaj innych znaków, takich jak dzienniki (Console.app), aktywność dysku (na przykład:), aktywność iotop fs_usagesieciowa (spróbuj rozłączyć się z siecią lokalną, wyłączając urządzenia w preferencjach sieciowych), spróbuj odinstalować / usunąć ze kextunloadsterowników pamięci pochodzą od stron trzecich - tablety, modemy USB 3g itp. Sprawdź, czy są aplikacje instalujące kexts

Upewnij się także, że twój system plików nie jest uszkodzony, jeśli ostatnio miałeś jakieś awarie - sprawdź.

mspasov
źródło
1
Miałem ~ 200% użycia procesora (2 z 4 rdzeni) prawie stale, zwykle zaczynając od rozruchu podczas przesyłania plików lub czegoś podobnego, ale nie wracałem później do normy. Okazało się, że mój wolumin systemowy wymaga naprawy. Gdy to zrobiono, kernel_taskwrócił do normalnego poziomu aktywności.
Daniel Beck
1
Link w odpowiedzi nie jest już dostępny
Swader
1
@Santa Dziękujemy za sugerowaną edycję linku, ale nie ma sensu usuwać linku, gdy wersja istnieje na Wayback Machine. Zamień link na link do Wayback Machine.
grg
8

Jak wspomniano przez @Christopher, ciepło może powodować wzrost wydajności procesora jądra. Powód wymieniono w tym artykule „Naprawianie” kernel_task Problemy z procesorem w MacOS Lion 10.7 . Najwyraźniej, gdy procesor się nagrzeje, plik ACPI_SMC_PlatformPlugin.kext zajmie cykle procesora, próbując zmniejszyć faktyczne obciążenie procesora.

Jednym z rozwiązań jest schłodzenie komputera Mac (np. Wentylatora) przez wentylator zewnętrzny lub coś w rodzaju SMCFanControl .

W artykule podano inne rozwiązanie, które polega na usunięciu podtekstu, który wyzwala to zachowanie. Chociaż muszę przyznać, że osobiście nie jestem pewien, jak bezpieczne jest wyłączenie tego zachowania.

studgeek
źródło
2
Zaryzykuję przypuszczenie, że jest to powód, dla którego większość kernel_task utrzymuje trwałe wysokie użycie procesora. Za każdym razem, gdy mi się to zdarzało, dość intensywnie korzystam z mojej maszyny i zaczynało się to opóźniać, ale żaden z oczywistych procesów, których używałem, nie powodował gwałtownego wzrostu, po prostu kernel_task. Zamknij ciężkie procesy (zwykle filmy lub gry) i ostatecznie znikną. Tymczasem mój 2011 MBP brzmi, jakby miał wystartować! Roztrzaskałem go i dobrze wyczyściłem, usunąłem koce z radiatorów i wróciłem do pracy z niskim poziomem wentylatora i bez wariacji na jądro.
Joey T,
5

Zwykle kernel_taskwymyka się spod kontroli, gdy niektóre inne procesy nadmiernie wykorzystują wywołania systemowe lub zasoby (zdarzenia we / wy pamięci lub dysku).

Gdy tak się stanie, możesz skorzystać z fs_usagenarzędzia raportowania, które w czasie rzeczywistym pokazuje połączenia systemowe i błędy strony związane z aktywnością systemu plików.

Uruchom więc to polecenie w terminalu:

sudo fs_usage

następnie obserwuj, które procesy często wykonują niektóre wywołania systemowe, a jeśli ich nie używasz, rozważ ich zamknięcie / zabicie.

Aby być bardziej szczegółowym, sprawdź kolumnę CZAS INTERWAŁU, która daje upływ czasu spędzonego na wywołaniu systemowym. WPojawiające upływie czasu wskazuje, że proces został zaplanowany z działalności (w tym wypadku obejmuje czas, jaki upłynął czas oczekiwania).

Aby więc odfiltrować procesy, które wykorzystują najwięcej czasu w wywołaniach systemowych, uruchom:

sudo fs_usage | grep -v 0.0000

który pokaże Ci w ostatniej kolumnie najbardziej głodne procesy (pod względem czasu jądra). Możesz dostosować liczbę zer dla precyzji (mniej wyświetlanych zer, więcej czasu spędzonego).

Aby uzyskać więcej pomysłów, sprawdź również: Jak zbadać użycie pamięci zadań wysokiego jądra?


Oto najczęstsze problemy:

kenorb
źródło
2
Dobry rozsądny strumień wyjściowy po odfiltrowaniu iTerm2 i grepsamego siebie:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra
4

Miałem ogromny skok w zużyciu procesora przez kernel_task i okazało się, że mój wentylator procesora był częściowo odłączony. kernel_task ma coś wspólnego z dławieniem procesora, gdy robi się za gorąco. W twoim przypadku być może twój fan jest po prostu zalany śmieciami i kurzem i musi zostać wyczyszczony.

Krzysztof
źródło
To szalone! Czy debugowałeś kiedyś swoje dzienniki? Jak doszedłeś do tego rozwiązania?
Ricket
3

Miałem ten sam problem w Yosemite, ale dzięki tej dobrej duszy opartej na innym dobrym człowieku mogłem go rozwiązać. Nadal nie rozumiem, co się stało, ale po tym, jak straciłem cały weekend, próbując to rozgryźć, po prostu poddałem się i ślepo stosowałem się do jego instrukcji. Spójrz na moją desperację w monitorze aktywności:

Wszystkie twoje procesory należą do nas

Bądź ostrożny, zawsze najpierw wykonaj kopię zapasową i przeczytaj podane linki, aby uzyskać wyjaśnienie. Przyjmuję zerową odpowiedzialność za wszelkie spowodowane szkody. Zostałeś ostrzeżony.

Znajdź model

$ system_profiler -detailLevel mini | grep „Identyfikator modelu:”

Identyfikator modelu: MacBookPro8,2

Przenieś i wykonaj kopię zapasową pliku

$ mkdir -p ~ / backup

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

$ sudo mv MacBookPro8_2.plist ~ / backup /

Ktoś nadal używa ciebie MS-DOS
źródło
1
To rozwiązanie działało dla mnie. Mam tę samą wersję MacBookPro. Niestety wiąże się to z wyłączeniem funkcji zaprojektowanej w celu zwiększenia żywotności komputera. Sprawdziłem temperaturę procesora i funkcjonalność wentylatora i wydaje się to normalne, więc zakładam, że jest błąd w tej funkcjonalności, jednak nadal nie byłem w stanie zrozumieć, dlaczego uruchomiono zabezpieczenie przed awarią chłodzenia procesora (czasami z przed zalogowaniem, bez końca).
errant.info
@ errant.info z jakiegoś powodu El Captain rozwiązał to. Mój komputer Mac miał również wadliwą baterię i zmieniłem się z El Captain, więc nie wiem, która czynność faktycznie naprawiona. Powodzenia z komputerem Mac!
Ktoś nadal cię używa MS-DOS
2

Korzystam z systemu OSX Lion z nowym komputerem MacBook Pro z 2011 r., A ostatnio kernel_task działa około 25-30% procesora, a mój wentylator wiruje maksymalnie przez wiele godzin. Próbowałem jednej rzeczy na raz i to, co rozwiązało, to ... zamykanie 5 lub 6 okien w aplikacji Finder. Nie mogę powiedzieć, że rozumiem dlaczego, ale to było jasne.

Jameson Quinn
źródło
2
Czy masz zainstalowane jakieś rozszerzenia Findera? Na przykład programy, które dodają coś do paska narzędzi lub menu kontekstowego?
Ricket
1
Wynika to z faktu, że jedno lub więcej okien ma zaznaczone pole wyboru „pokaż wszystkie rozmiary” w konfiguracji „Widok-> Pokaż opcje widoku”. Wyłącz to, a następnie ustaw jako domyślne dla wszystkich folderów i zatrzyma się.
Brian Topping
2

Na moim komputerze Mac użycie procesora przez kernel_task jest proporcjonalne do przepustowości łącza internetowego, którego używam, od około 0% do 50%. Prawdopodobnie jest to spowodowane sterownikami mojego modemu Huawei 3G (HuaweiDataCardDriver.kext).

Możesz spróbować wyłączyć rozszerzenia jądra. Nie ma potrzeby używania kextunload: po prostu przenieś pakiety kext z / System / Library / Extensions / do innego folderu i uruchom ponownie. Możesz użyć Canary Konsultanta lub kextstat | grep -v com.applewyświetlić listę rozszerzeń jądra, które nie były dostarczane z OS X.

Lri
źródło
1

Aby rozwiązać konkretne problemy z jądrem poza kontrolą , oto kilka przydatnych poleceń:

  • Profiluj cały system, koncentrując się na procesie jądra (PID: 0), uruchom:

    sudo spindump 0 -reveal
    

    W przypadku konkretnego procesu (np. launchd) Użyj sample, np. sudo sample launchdLub według PID.

  • Aby zebrać zużycie pamięci według zadania jądra, użyj (domyślnie posortowane według typu brudne):

    sudo footprint 0
    

    Uwaga: Służy -ado kierowania wszystkimi procesami.

  • Aby zebrać całego systemu informacji diagnostycznych z wielu utils, uruchom: sudo sysdiagnose.

    Można to również uruchomić, naciskając Shift- Control- - -. (kropka).

    Powinieneś zobaczyć ekran migający po uruchomieniu, a następnie poczekaj kilka minut, aż plik zostanie ujawniony w Finderze .

    Zobacz: Jak uzyskać pliki diagnostyczne systemu z OS X?

    Następnie dekompresji i sprawdzić pliki, takie jak footprint*.txt, spindump.txt, taskinfo.txt, bc_stats.txti inne.

  • Sprawdź vm.swapusagestany jądra, np sysctl -a | grep ^vm.swapusage.

    Zasadniczo, więcej używasz swapów (sprawdź pliki wymiany, /private/var/vmktórymi zarządza dynamic_pager, patrz :)man dynamic_pager , tym więcej jądra zmaga się z wydajnością z powodu operacji Swapins / Swapouts (patrz man vm_stati man fs_usage). Aby przetestować, uruchom:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    Uwaga: Hit Control- Caby zatrzymać.

kenorb
źródło
0

Dla mnie miałem jeden proces (w tym przypadku Netbeans, który odczytywał plik taki jak 20 GB) i użyłby 80% procesora dla netbeans, 20% procesora dla kernel_task (bardzo podejrzane). To spowodowało, że cały mój system działał jak tar.

Podejrzane jest również to, że „menumetery” zgłaszałyby dużo czasu „sys” na jednostkę centralną. Możesz to również zobaczyć w poleceniu „top”, npCPU usage: 21.40% user, 23.74% sys

Później może to być netbeans 120% procesora, kernel_task 65%, ale w każdym razie oba były „wysokimi procesorami w tym samym czasie”

sudo fs_usage pokazał wiele tego:

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

Moja teoria jest taka, że ​​netbeans „czytał tak dużo”, że powodował, że błędy stron nawet uruchamiały swój własny program (tj. Wysyłały do ​​zamiany własnego programu), więc otrzymywały kolejkę za systemem błędów stron. I prawdopodobnie wymiana „innych programów” również na zamianę, co powoduje, że cały system się zwalnia.

Używając top, kolumna FAULT również wzrastała o 70K / s.

rogerdpack
źródło
0

Mój Macbook Pro był prawie bezużyteczny ze względu na wysoki procesor kernel_task przez wiele tygodni W tym samym czasie bateria się napompowała, więc ostatecznie zdecydowałem się na Apple Center w Rzymie, aby go wymienić ... nawet jeśli poza gwarancją Apple wymieniło moją baterię (i klawiatura również) za 0 €. Jeszcze lepiej ... problem z jądrem nagle znika !!! więc jestem całkiem pewien, że to z powodu baterii, bezpośrednio lub pośrednio

Luca Rocchi
źródło