chamada do sistema de getrusage: qual é o "tamanho máximo do conjunto de residentes"

23

man getrusage 2 diz

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.

Então, o que esse número significa exatamente?

ren
fonte
Apenas uma nota ru_maxrssem bytes em máquinas Mac / BSD.
Isaac Turner
1
Pequeno esclarecimento: ru_maxssestá em bytes nas máquinas Mac OS X (Darwin), mas em kilobytes nas máquinas BSD e Linux. Consulte stackoverflow.com/q/40773924/781723 e stackoverflow.com/q/12050913/781723 .
DW

Respostas:

27

O tamanho do conjunto residente de um processo é a quantidade de memória que pertence a ele e está presente (residente) na RAM (RAM real, não trocada ou não residente).

Por exemplo, se um processo aloca um pedaço de memória (digamos 100Mb) e o usa ativamente (lê / grava nele), o tamanho do conjunto residente será de cerca de 100Mb (mais a sobrecarga, o segmento de código etc.). Se após o processo parar de usar (mas não liberar) essa memória por um tempo, o sistema operacional poderá optar por trocar trechos dessa memória por troca, para abrir espaço para outros processos (ou cache). O tamanho do conjunto de residentes diminuiria pela quantidade que o kernel trocasse. Se o processo acordar e começar a reutilizar essa memória, o kernel recarregará os dados do swap e o tamanho do conjunto residente aumentará novamente.

O ru_maxrsscampo de struct rusageé a "marca d'água alta" para o tamanho do conjunto residente. Indica o pico de uso da RAM para esse processo (ao usar RUSAGE_SELF).

Você pode limitar o tamanho do conjunto de residentes de um processo para evitar que um único aplicativo "consuma" toda a RAM do sistema e forçar outros aplicativos a trocar (ou falhar totalmente com condições de falta de memória).

Esteira
fonte