Jaki jest prawidłowy sposób uzyskania rozmiaru procesu na Solaris, HP-UX
i AIX
? Czy powinniśmy używać top
lub ps -o vsz
lub czegoś innego?Rozmiar procesu w systemie UNIX
Odpowiedz
Dokładne definicje vsize
, rss
, rprvt
, rshrd
i inne skróty niejasne wyglądzie różnią się od systemu operacyjnego do systemu operacyjnego. Strony manualne dla poleceń top
i ps
będą miały pewien opis, ale wszystkie takie opisy są znacznie uproszczone (lub są oparte na implementacjach długo wymarłych kernela).
"Wielkość procesu" jako koncepcja jest piekielnie trudna do określenia w ogólnym przypadku. Odpowiedzi w konkretnych przypadkach zależą w dużej mierze od rzeczywistej implementacji zarządzania pamięcią w systemie operacyjnym i rzadko są tak satysfakcjonujące, jak koncepcja "wielkości procesowej", która istnieje w umysłach większości użytkowników (i większości programistów).
Na przykład żadna z tych liczb (ani żadna ich kombinacja) nie może być używana do informowania, ile dokładnie takich procesów można uruchomić jednocześnie w danej ilości wolnej pamięci. Ale tak naprawdę najlepszym wyjściem jest przyjście z tego końca: dlaczego chcesz ten numer i do czego go użyjesz? Biorąc pod uwagę te informacje, myślę, że otrzymasz bardziej przydatne odpowiedzi.
Tak, masz rację, zablokować w VSZ.
ps u
podaje VSZ i RSS, które są wielkością pamięci wirtualnej i ustawionym rozmiarem użytkownika. RSS określa, ile pamięci fizycznej zostało przydzielone do procesu, a VSZ jest wielkością pamięci wirtualnej procesu. Jeśli masz kilka kopii uruchomionego programu, duża część pamięci w VSZ będzie współdzielona między tymi procesami.
W systemie Solaris można uzyskać szczegółowe informacje o wykorzystaniu pamięci procesowej za pomocą komendy pmap
. W szczególności, pmap -x <pid>
pokazuje, ile pamięci procesu jest współużytkowane i ile jest konkretnie wykorzystywane przez ten proces. Jest to przydatne do opracowania "marginalnego" użycia pamięci procesu - dzięki tej technice można uniknąć podwójnego liczenia udostępnianych bibliotek.
I podsumował wielkości zadanej zamieszkania dla wszystkich procesów, takich jak ten (jako root):
ps ax -o rss | awk '{rss += $1;} END { print rss}'
Liczba VSZ jest bezużyteczny, jeśli to, co Cię interesuje to zużycie pamięci. VSZ mierzy, ile pamięci wirtualnej * procesu * zostało oznaczone przez proces jako pamięć, która powinna zostać zmapowana przez system operacyjny, jeśli proces go dotknie. Ale nie ma to nic wspólnego z tym, czy ta pamięć została rzeczywiście dotknięta i użyta. VSZ jest wewnętrznym szczegółem na temat tego, jak proces przypisuje pamięć - jak duży fragment nieużywanej pamięci chwyta jednocześnie. Sprawdź RSS dla liczby stron pamięci, które faktycznie zaczął używać. –