Mam bardzo dziwny problem, z którym trudno mi zdiagnozować podstawową przyczynę.
Mam komputer Mac Pro (2008, 8-rdzeniowy 2.8 GHz, 8800GT) z 14 GB pamięci RAM (ostatnio zaktualizowany z powodu tego problemu!).
Po uruchomieniu systemu i zalogowaniu się, vm_stat / top / Activity Monitor pokaże, że zadanie jądra ma przydzielone około 150 MB, a maszyna ma przydzielone około 800 MB pamięci przewodowej.
Nawet początkowo 800 MB wydaje się okropnie dużo pamięci przewodowej do przydzielenia bez uruchomionych aplikacji - ale jest coraz gorzej. (Uwaga: Przewodowa jest zablokowana, pamięć niewymienna )
Po bardzo krótkim czasie, czasami uruchamianym przez coś tak prostego, jak uruchomienie terminalu, kernel_task przeskoczy do 8-900 MB rzeczywistej pamięci (RSIZE), a pamięć przewodowa przyspieszy do 1,6 GB (co oznacza, że wszystkie dodatkowe żądania pamięci dotyczą przewodowa pamięć RAM w jądrze).
Jeśli porzucę wszystko (IE: brak uruchomionych aplikacji, zablokowanie monitora aktywności lub terminala, aby wyświetlić górę), nie będzie znaczącego zmniejszenia ani kernel_task RSIZE, ani użycia pamięci przewodowej. Postępowanie w drugą stronę i ładowanie systemu zadaniami pokazuje również, że pamięć przewodowa nie ulega zmniejszeniu - i, co ważne, nie jest zmniejszana zamiast intensywnej wymiany.
Jeśli się wyloguję i zaloguję ponownie, to trochę się zmniejszy (450 MB kernel_task, 1,28 GB Przewodowy), ale nie wróci do początku.
Nie używam żadnych zwariowanych kextów - a ponadto kextstat nie pokazuje tam żadnych dużych alokacji pamięci; największy to com.apple.nvidia.nv50hal przy około 4 MB pamięci.
Maszyna wydaje się bardziej powolna, gdy tak się dzieje - co nie jest zaskakujące, ponieważ tak ogromna ilość pamięci RAM została oznaczona jako niepartowalna.
Mam więc kilka pytań:
1) Czy istnieje dobry sposób na zdiagnozowanie, co przypisało całą tę pamięć przewodową? Często jest ponad 2 razy większy niż rozmiar jądra, bez uruchamiania żadnych aplikacji. Rzeczywista suma pamięci wydaje się nie sumować - wygląda na to, że istnieje mnóstwo pamięci RAM, która nie jest nigdzie rozliczana.
2) Co się dzieje, że jądro nagle potrzebuje 6 razy więcej pamięci?
Odpowiedzi:
Aby dowiedzieć się, dlaczego jądro zużywa więcej pamięci niż zwykle, możesz użyć różnych narzędzi.
kernel_task
żadne inne zadanie wykorzystujące więcej pamięci niż zwykle (następnie rozważ zabicie).vm_stat 1
aby zobaczyć statystyki pamięci w czasie rzeczywistym i czy twoja pamięć naprawdę zwiększa się co sekundę.fs_usage
(jako root) narzędzie do monitorowania wywołań systemowych i błędów stron w czasie rzeczywistym.Aby sprawdzić sumę nieprzyzwoitych / anonimowych przydziałów wielu procesów uruchomionych w Terminalu:
Gromadzi informacje o pamięci, takie jak ilość zamienionych pamięci (na pamięć użytkownika lub jądra).
Co więcej, jeśli uważasz, że jądro zajmuje najwięcej pamięci, wypróbuj
zprint
narzędzie:Wyświetli informacje o strefach jądra
Jeśli chcesz wymusić wyczyszczenie pamięci podręcznej dysku (aby zwolnić trochę pamięci), możesz spróbować:
Zobacz także: Jak sprawdzić użycie pamięci zadań wysokiego jądra? w AD SE
źródło
Rozszerzenia jądra są tylko jednym z wielu fragmentów kodu, które mogą być wykonywane przez system operacyjny bez Twojej wiedzy. Mam małe narzędzie oparte na języku Python o nazwie Consultant's Canary, które pomoże ci znaleźć kilka z nich:
Jeśli nie pojawi się żaden potencjalny winowajca, powiedziałbym, że bootuje się z czystej instalacji i sprawdzam, czy możesz odtworzyć tam problem.
źródło