Dlaczego wartość VSIZE na górze różni się od wartości VSZ (rozmiar zestawu wirtualnego) w ps?

9

Wiem, że VSZ psjest dla całkowitej przestrzeni adresowej przydzielonej dla aplikacji i czasami jest aliasowany jako vsize (wspomniany na stronie pspodręcznika man w systemie Linux), ale jaka jest definicja VSIZE top? To najlepsze wyjście z iPhone'a jest inne niż najlepsze w Linuksie:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
źródło
Nie mogę tego odtworzyć na żadnej z moich maszyn Darwin. To sprawia, że ​​myślę, że skorupa, którą zainstalowali na iPhonie, miała dziwny zestaw bloków?
wielomian
wygląda na to, że obliczają RSIZE / rss w ten sam sposób, ale ps zgłasza vsz 2,5x większy niż zgłaszany przez top. być może topw IOS nie zawiera współdzielonych obiektów w vsize lub coś w tym rodzaju.
Tim Kennedy,
„To najlepsze wyjście z iPhone'a jest inne niż najlepsze w Linuksie” - nie jest zaskoczeniem, prawda?
poige

Odpowiedzi:

5

System pamięci Linux jest wypełniony wieloma procedurami narzędzi do optymalizacji pamięci i współdzielenia pamięci, co sprawia, że ​​sama koncepcja dzielenia się pamięcią i korzystania z niej jest uciążliwa. Wyjściowe polecenia ps i inne polecenia powiązane z psami przetwarzają dane wyjściowe z danych w /procsystemie plików. Szczególnieps, RSS (pamięć wielkości rezydentnej) i VSIZE (wielkość pamięci wirtualnej) są ważne, jednak VSIZE nie pokazuje dokładnego wykorzystania pamięci, a różnica między VSIZE i rss jest tym, co jest rzeczywiście zamierzone i przydzielone programowi podczas inicjalizacji, ale może jeszcze się nie odwoływać. Podobnie jak program może mieć wiele bibliotek połączonych, ale nie są one jeszcze załadowane, ponieważ nie są jeszcze przywoływane w rzeczywistym środowisku uruchomieniowym programu. RSS podaje całkowitą pamięć faktycznie używaną przez program, ale może nie dawać prawdziwego obrazu zużycia pamięci, ponieważ większość przydzielonej pamięci może być współdzielona z innymi instancjami tego samego procesu lub innych procesów. Spoglądanie w dół /proc/<processid>/mapsmoże dać przybliżone wyobrażenie o tym, jak pamięć została wykorzystana, ale są one czasem mylące. Posługiwać siępmap -x <pid> z wiersza poleceń, przydatne jest, aby zobaczyć rozkład.

Często lepszymi narzędziami są freei vmstat. freepoda ogólne informacje o bieżącym zużyciu pamięci, a za pomocą vmstat można sprawdzić, jak często jest aktualizowana.

Nikhil Mulley
źródło
Kolejny powód lub przemyślane wyjaśnienie, dlaczego ps NIE powinien być uważany za zapewniający prawidłowe użycie pamięci procesu. Przeczytaj to na virtualthreads.blogspot.com/2006/02/...
Nikhil Mulley,
2
Plakat tej odpowiedzi próbuje powiedzieć, że stosowana definicja pamięci jest złożona i różnorodna. W jądrze nie ma pojedynczego miejsca, w którym jest ono śledzone i zgłaszane. Narzędzia wykonują własną interpretację licznych statystyk raportowanych przez jądro.
Johan