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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.