2008-12-06 7 views
7

Czy ktoś może wyjaśnić znaczenie wartości SIZE i RSS, które otrzymujemy z prstat w systemie Solaris?Znaczenie SIZE i wartości RSS w wyjściu prstat

Napisałem testową aplikację C++, która przydziela pamięć za pomocą new[], wypełnia ją i zwalnia z pomocą delete[].

Jak rozumiem, wartość SIZE powinna być związana z ilością pamięci wirtualnej, która została "zarezerwowana" przez proces, czyli pamięcią "malloced" lub "newed".

Ta pamięć nie sumuje się w wartości RSS, chyba że naprawdę go użyję (wypełniając niektóre wartości). Ale nawet jeśli uwolnię pamięć, RSS nie spadnie.

Nie rozumiem, co semantyczne mogę poprawnie przypisać do tych 2 wartości.

Odpowiedz

4

RSS jest (AFAIK niezawodnie) reprezentujący ile pamięci fizycznej proces używa. Korzystając z domyślnego alokatora pamięci Solaris, zwalnianie pamięci nie ma nic wspólnego z RSS, ponieważ po prostu zmienia niektóre wskaźniki i wartości, aby powiedzieć, że pamięć może być ponownie wykorzystana. Jeśli nie użyjesz ponownie tej pamięci przez przydzielenie jej ponownie, zostanie ona ostatecznie podzielona na strony i nastąpi spadek zawartości RSS.

Jeśli chcesz uwalnia pamięć zostać zwrócone niezwłocznie po darmowy, można użyć podzielnika Solaris mmap takiego:

export LD_PRELOAD=libumem.so 
export UMEM_OPTIONS=backend=mmap 
+0

Nie zapominajmy jednak, że w zależności od wielkości alokacji będzie powrócić do normalnego sbrk Zachowanie, czyli na moim polu solaris, jeśli tak jak opisałem i przydzielałem porcje mniejsze niż 16k, nie zwolni to pamięci na wolnej wolnej woli, ale na porcjach> 16k. – ScaryAardvark

1

Rozmiar jest całkowita wielkość pamięci wirtualnej procesu, w tym wszystkie odwzorowane plików i urządzeń, a RSS powinna być wielkość zestaw zamieszkania, ale jest całkowicie niewiarygodne, należy postarać się o te informacje od pmap.

0

Zgodnie z ogólną zasadą, gdy pamięć zostanie przydzielona do procesu, nigdy nie zostanie zwrócona do systemu operacyjnego. W systemach uniksowych wywołanie sbrk() jest używane do rozszerzenia przestrzeni adresowej procesów i nie ma analogicznego wywołania, aby przejść w innym kierunku.

Powiązane problemy