wywołanie systemowe getrusage: co to jest „maksymalny rozmiar zestawu rezydenta”

23

man getrusage 2 mówi

ru_maxrss (since Linux 2.6.32)
              This is the maximum resident set size used (in kilobytes). For RUSAGE_CHILDREN, this is the resident set size of the largest
              child, not the maximum resident set size of the process tree.

Co dokładnie oznacza ta liczba?

ren
źródło
Tylko uwaga ru_maxrssw bajtach na komputerach Mac / BSD.
Isaac Turner,
1
Małe wyjaśnienie: ru_maxssjest w bajtach na komputerach Mac OS X (Darwin), ale w kilobajtach na komputerach BSD i Linux. Zobacz stackoverflow.com/q/40773924/781723 i stackoverflow.com/q/12050913/781723 .
DW

Odpowiedzi:

27

Rozmiar zestawu rezydentnego procesu to ilość pamięci, która do niego należy i jest obecnie obecna (rezydentna) w pamięci RAM (prawdziwa pamięć RAM, nie zamieniona lub w inny sposób nie rezydentna).

Na przykład, jeśli proces przydzieli fragment pamięci (powiedzmy 100 Mb) i użyje go aktywnie (odczyta / zapisze), jego rozmiar rezydentny wyniesie około 100 Mb (plus narzut, segment kodu itp.). Jeśli po zakończeniu procesu pamięć przestanie na chwilę korzystać z tej pamięci (ale jej nie zwolni), system operacyjny może zdecydować o zamianie fragmentów tej pamięci na zamianę, aby zrobić miejsce dla innych procesów (lub pamięci podręcznej). Rozmiar zestawu rezydentnego zmniejszyłby się następnie o kwotę, którą wymieniło jądro. Jeśli proces się obudzi i zacznie ponownie wykorzystywać tę pamięć, jądro ponownie załaduje dane z wymiany, a rozmiar zestawu rezydentnego ponownie wzrośnie.

ru_maxrssPole struct rusagejest „high water mark” dla rezydenta wielkości zadanej. Wskazuje szczytowe użycie pamięci RAM dla tego procesu (podczas używania RUSAGE_SELF).

Można ograniczyć wielkość zestawu rezydentnego procesu, aby uniknąć sytuacji, w której jedna aplikacja „zje” całą pamięć RAM w systemie i nie będzie zmuszać innych aplikacji do zamiany (lub niepowodzenia całkowicie w przypadku braku pamięci).

Mata
źródło