Czy jest jakiś sposób na stwierdzenie, czy konkretna aplikacja działająca w systemie Mac OSX (10.2+) zamieniła część pamięci (np. Na jeden z /private/var/vm/swapfile*
plików)? I jak dużo?
Nagroda (150 rps)
Proste pytanie. Pierwsza poprawna odpowiedź zostanie zaakceptowana, jeśli zobaczę ją po upływie mniej niż 2 dni od wygaśnięcia okresu nagrody. Jeśli nadal go nie mam, przyznam go każdemu, kto opowie mi najciekawszy nowy fakt. A jeśli nie nauczyłem się ani jednej rzeczy z żadnej z odpowiedzi, przyznam nagrodę każdemu, kto pisze najładniej.
macos
mac
swap
virtual-memory
Charles Stewart
źródło
źródło
Odpowiedzi:
Dużo googlowałem ;-) Jak rozumiem, pamięć wirtualna danego procesu jest podzielona na strony obsługiwane przez system operacyjny i prezentowane aplikacji tak, jakby była pamięcią RAM.
W OS X opartym na jądrze Macha jest to obsługiwane przez demona o nazwie
dynamic_pager
. Ten proces generuje pliki wymienne,/private/var/vm
jak wspomniałeś. Te pliki wymiany nie są generowane dla poszczególnych aplikacji, ale na podstawie „potrzebnej pamięci”. Pliki wymiany są dzielone na strony o długości 4096 bajtów, a następnie strony są przydzielane do procesów, które (są uważane przez system operacyjny za) potrzebują pamięci wirtualnej. Dlatego nie można skojarzyć pliku wymiany z daną aplikacją, ale można zobaczyć, ile stron używa dany proces.Możesz spróbować użyć polecenia
vm_stat
w Termial. To daje ci statystyki użycia VM (zwróć uwagę, że „rozmiar strony” razy liczba aktywnych stron jest równa rozmiarowi twoich plików wymiany). To wyjaśnia również, dlaczego możesz mieć wiele procesów przy użyciu maszyny wirtualnej, ale tylko kilka plików wymiany.Inne zabawne polecenia to
vmmap [process id]
ipagestuff
.źródło
vmmap [pid]
lubvmmap -pages [pid]
odpowiedź na drugą część pytania?vmmap PID
Polecenie powinno dać wam kilka pomocnych statystyk w liczbach o danym procesie.źródło
W oparciu o zamieszczone tutaj pomysły stworzyłem ten mały wiersz kodu:
który wyświetla sekcję Podsumowanie (3 linie) wyjścia vmmap. Użyłem
notifyd
tego przykładu, ale możesz go zastąpić dowolnym znanym PID.Ta linia spróbuje wyświetlić wszystkie linie Podsumowania wszystkich uruchomionych procesów. Oczywiście niektóre zawiodą, ponieważ ich identyfikator procesu już zniknął (proces zakończony), ale ogólnie uważam, że jest to świetny sposób na przewijanie listy informacji o pamięci i wykrycie głównego zamieniacza.
Edytowano: Pewien anonimowy użytkownik widział, że ten ostatni wiersz poleceń wymaga ulepszenia, ponieważ oczywiście oryginalny wariant już nie działał. Dziękuję bardzo, kimkolwiek jesteś i przykro mi, że Twoja edycja została odrzucona. (Pierwsze polecenie poprzednio brzmiało „ps xa” i powodowało niepowodzenie vmmap z powodu rzucenia na niego nagłówka ps)
Dalsza poprawa: jeśli chcesz od razu poznać nazwę programu, skorzystaj z tej małej zmiany
Mała poprawka na drugim końcu tego polecenia umożliwia filtrowanie pod kątem niektórych nazw programów lub komponentów ścieżki wiersza poleceń. Tutaj przyglądamy się tylko wszystkim procesom z „Library / PrivateFrameworks”.
źródło
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'
. Nadal nie zatrzymuje się na ctrl + c, ale także nie zatrzymuje się na błędach vmmap.Otwórz Monitor aktywności w folderze / Aplikacje / Narzędzia, a kolumna Pamięć wirtualna to powie. Możesz kliknąć nagłówek Pamięć wirtualna, aby posortować według większości lub najmniej wykorzystania przez aplikację. Pamiętaj również, aby zmienić Moje procesy na Wszystkie procesy i pamiętaj, że jedna aplikacja może mieć wiele procesów. Na przykład aplikacja Little Snitch innej firmy składa się z „Little Snitch Network Monitor” i „Little Snitch UIAgent”.
źródło
Jak powiedział ridogi, otwórz Monitor aktywności. Przejdź do procesu, który chcesz sprawdzić, i kliknij ... Sprawdź! Następnie kliknij pamięć; powie ci ile wymiany używa dany proces.
Baw się dobrze!
źródło