Jak sprawdzić użycie pamięci zadań wysokiego jądra?

131

Korzystałem z mojego MBP (z 16 GB pamięci RAM) jak zwykle i nieoczekiwanie mam to okienko pop-up, które:

W systemie zabrakło pamięci aplikacji.

Aby uniknąć problemów z komputerem, zamknij wszystkie nieużywane aplikacje.

Wymuś zamknięcie aplikacji - w systemie zabrakło pamięci aplikacji - zrzut ekranu

Oczywiście zamknąłem kilka, które mogłem, ale to nie pomogło.

Po sprawdzeniu pamięci wydaje się, że zadanie jądra zjadło 7 GB, a pamięć wymiany 22,36 GB została wykorzystana z 23 GB (co oczywiście miało miejsce). Jednak wciąż mam 20 GB wolnego miejsca na moim SDD.

Pamięć - Menu iStat - zrzut ekranu

Monitor aktywności niewiele pomógł, gdy mój OS X zmierzał do zniszczenia.

Process Explorer

kernel_task - Zakładka Pamięć - zrzut ekranu kernel_task - Zakładka Statystyki - zrzut ekranu

Moje topstatystyki przed zamrożeniem jądra:

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.

Na koniec mój OS X został zamrożony i musiałem wykonać twardy reset, naprawić SDD w trybie odzyskiwania, a następnie naprawić (odzyskiwanie utraconej pracy, naprawianie konfliktów aplikacji, sprawdzanie folderu utracone + znalezione, brak kart Chrome / Terminal, ból głowy itp. ).

Moje pytanie brzmi: jak sprawdzić zużycie pamięci przez zadanie jądra lub jak właściwie poradzić sobie z tego rodzaju sytuacją? Próbowałem pobrać próbkę z monitorem aktywności, ale jest wyszarzona.


Moje dane MBR: 2,3 GHz Intel Core i7 (koniec 2013 r.) Z 16 GB pamięci RAM. OS X: 10.9.5

kenorb
źródło
1
@klanomath Zazwyczaj mam dużo zawieszeń, szczególnie przy długim czasie bezczynności, a są to po prostu zawieszenia jądra z nieznanego powodu (mój MBR jest całkiem nowy). Ale to pierwszy raz, kiedy zobaczyłem to okienko, w którym brakuje mi pamięci (16 GB pamięci RAM i 50 GB wolnego miejsca). Jednak moim głównym pytaniem jest, jak zbadać wykorzystanie pamięci przez zadanie jądra, więc jeśli jest ono powtarzalne, nie powinno być istotne.
kenorb
5
Użyj zprint -t(Lion) lub sudo zprint -t(Mountain Lion i później).
klanomath
1
Masz rację, gdy nie ma znaczenia odtwarzalność twojego pytania w tytule, ale może to być właściwe rozwiązanie twojego problemu (problemów).
klanomath
1
Czy mógłbyś dodać wynik do pytania (lub zapisać go w swoich dokumentach)? Dla odniesienia w przyszłości / w celu porównania go do zprinta wykonanego w bardziej krytycznym stanie systemu. IMHO to wyciek pecha. Jeśli ją opublikujesz, być może będę mógł powiedzieć ci więcej.
klanomath
1
Nagle mam ten sam problem. Jestem prawie pewien, że jest to związane z dokerem dla Maca lub Hyperkita. Jak tylko przestanę dokować dla Maca, kernal_task zaczyna jeść 10 GB + pamięci
Charlie Martin

Odpowiedzi:

176

Istnieje wiele błędów, które mogą się nie powieść w przypadku użycia dużego zadania jądra. Zwykle jest to związane z wadliwym lub ciężkim procesem, który nadmiernie wykorzystuje zasoby systemowe (takie jak indeksowanie pamięci, uruchamianie maszyn wirtualnych, zbyt wiele kart w przeglądarce internetowej lub niektóre inne procesy w tle).

Oto kilka metod, które pomagają zbadać problemy z użyciem jądra OS X:

Podstawowe metody

  • Uruchom Console.appi zaznacz „ Wszystkie wiadomości ”, aby zobaczyć, czy dzieje się coś niezwykłego.
  • Użyj Monitora aktywności, aby odczytać pamięć systemową i ustalić, ile procesora, pamięci RAM i dysku jest używane.

    Alternatywnie uruchom topw terminalu i przytrzymaj, Spaceaby odświeżyć - łatwiej znaleźć przyczynę problemu ( zamiany / zamiany / dyski ?).

  • Uruchomsudo fs_usage w Terminalu, aby zgłaszać w czasie rzeczywistym wywołania systemowe i błędy strony związane z aktywnością systemu plików (myślę, że jest to najlepsza opcja spośród wszystkich innych). Następnie naciśnij Control- Caby go zatrzymać.

    Działanie: Zastanów się nad zabijaniem aplikacji, które często pojawiają się na liście, ale ich nie używasz.

    Dowiedz się więcej na: Jak debugować niekontrolowany proces „kernel_task”?

  • Uruchomsudo syscallbypid.d (lub syscallbyproc.d), poczekaj chwilę, naciśnij Control- C. Teraz sprawdź, który proces wygenerował najwięcej wywołań systemowych w danym czasie (ostatnia kolumna), a jeśli go rozpoznasz, rozważ zabicie go. Jeśli nie, prześlij go Google i dowiedz się więcej.

Metody zaawansowane

  • Użyj sysdiagnosepolecenia (można je uruchomić, naciskając Shift- Control- - - .(kropka), aby szybko zebrać ogólnosystemowe informacje diagnostyczne pomocne w badaniu problemów z pamięcią systemową / wydajnością (pojawią się /var/tmp) albo przez ciebie, albo przez chłopaków Apple. Podczas analizy staraj się nie robić cokolwiek, po zakończeniu - rozważ rozpakowanie wygenerowanego pliku i przeanalizuj dzienniki.

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

  • Uruchom, footprintaby zebrać szczegółowe informacje o pamięci na poziomie typu dla poszczególnych maszyn wirtualnych i zamienionych bajtów:

    sudo footprint -a
    

    Starsza wersja:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Służy spindumpdo profilowania całego systemu, wygeneruje /tmp/spindump.txtplik (w tym jądro i jego rozszerzenia).

  • Służy vm_statdo wyświetlania statystyk pamięci wirtualnej. Na przykład

    vm_stat 1 # to display every second.
    
  • Służy zprintdo sprawdzania informacji o użyciu jądra, jest to możliwe poprzez:

    sudo zprint -t -s | head -n20
    

    Wyświetli najbardziej marnujące strefy jądra.

  • Służy newproc.ddo węszenia nowych procesów podczas ich wykonywania, creatbyproc.ddla plików:

    sudo newproc.d
    sudo creatbyproc.d
    

    Uwaga: W nowszym systemie OS X (10.11 lub nowszym) może to nie działać, gdy ochrona integralności jest włączona (sprawdzane przez csrutil status).

  • Try sar- raport aktywności systemu, który może próbkować i raportować różne skumulowane liczniki statystyk obsługiwane przez system operacyjny.

Aby uzyskać bardziej przydatne narzędzia do debugowania, sprawdź skrypty dtrace ( grep dtrace /usr/bin/*). Jeśli znasz wadliwy proces powodujący problem, możesz go użyć dtrussdo debugowania.


działania

Oto kilka sugestii, które mogą pomóc w problemach z systemem operacyjnym.

  • Zwolnij trochę nieaktywnej pamięci. Aby to zrobić, musisz najpierw opróżnić pamięć podręczną i wymusić usunięcie pamięci podręcznej dysku:

    sync && sudo purge
    

    sync - wymuś zakończenie oczekujących zapisów na dysku (opróżnij pamięć podręczną)

    purge - wymusza czyszczenie pamięci podręcznej dysku (opróżnianie i opróżnianie)

    Jego funkcją jest w zasadzie zakończenie wszystkich oczekujących operacji we / wy, które wykorzystują pamięć podręczną dysku, a następnie zwolnienie całej zajętej pamięci podręcznej dysku, więc powinno zwolnić miejsce na dysku, aby ułatwić stronicowanie i zamianę pamięci głównej. Jest bezpieczny w użyciu, ponieważ nie wpływa na anonimową pamięć przydzieloną przez malloc, vm_allocate itp.

  • Użyj niektórych aplikacji innych firm, aby usunąć nadmiar pamięci, takich jak iBoostUp , SystemPal itp.

  • Możesz także wyłączyć tymczasowe Spotlight:

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

    I rozważ inne usługi:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Zamknij przeglądarkę internetową i sprawdź, czy to pomoże. Na przykład korzystanie z Chrome jest bardzo pomysłowe, szczególnie gdy w tle odbywa się przetwarzanie frontonu (np. JavaScript) lub animacje podobne do reklam stale wyświetlają treść.

kenorb
źródło
1
Spotlight pojawia się ponownie, ale go nie używam i za każdym razem, gdy go zabiję, pojawia się drugi po ... Jak / powinienem się go pozbyć?
ling
1
@ling Proponuję zatem zadać kolejne pytanie, ponieważ jest to związane z pamięcią zadań wysokiego jądra, a nie specyficzną dla Spotlight.
kenorb
2
westcham , mam 4 GB pamięci RAM na moim komputerze Mac, a ostatnio zadanie jądra wzrosło do 3,1 GB, w zasadzie zamrażając cały komputer.
Zamknąłem
3
Niewystarczająco szczegółowe, aby faktycznie rozwiązać problem wysokiego kernel_taskzużycia pamięci i procesora.
hyiltiz
6

Miałem bardzo podobny problem po wymianie ekranu LCD na komputerze iMac pod koniec 2012 roku. Wentylator działał przy wysokich obrotach i miał wysokie użycie procesora przez jądro. Zawęziłem go do czujnika temperatury, który musisz przenieść ze starego ekranu LCD na nowy ekran zastępczy. jeśli zapomnisz to zrobić, wpłynie to na szybkość procesora i zadanie Kernel_task spowalniając twój system.

paproć 10
źródło