Significado de los valores SIZE y RSS en la salida de prstat
-
19-08-2019 - |
Pregunta
¿Alguien puede dar una explicación clara del significado de los valores SIZE y RSS que obtenemos de prstat en Solaris?
Escribí una aplicación de prueba de C ++ que asigna memoria con new []
, la llena y la libera con delete []
.
Como entendí, el valor de TAMAÑO debería estar relacionado con la cantidad de memoria virtual que ha sido "reservada" por el proceso, eso es memoria mal colocada o " nuevo " ;.
Esa memoria no se resume en el valor RSS a menos que realmente lo use (llenando algunos valores). Pero incluso si libero la memoria, el RSS no se cae.
No entiendo qué semántica puedo asignar correctamente a esos 2 valores.
Solución
RSS es (AFAIK confiablemente) representando cuánta memoria física está usando un proceso. Al usar el asignador de memoria predeterminado de Solaris, liberar memoria no hace nada con respecto a RSS, ya que solo cambia algunos punteros y valores para indicar que la memoria es libre de reutilizarse. Si no vuelve a usar esa memoria asignándola nuevamente, eventualmente se paginará y el RSS se caerá.
Si desea que la memoria liberada se devuelva inmediatamente después de una liberación, puede usar el asignador de Solaris mmap de esta manera:
export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap
Otros consejos
Tamaño es el tamaño total de la memoria virtual del proceso, incluidos todos los archivos y dispositivos asignados, y RSS debe ser el tamaño del conjunto residente, pero es completamente poco confiable, usted debería intentar obtener esa información de pmap .
Como regla general, una vez que se asigna memoria a un proceso, nunca se devolverá al sistema operativo. En sistemas Unix, la llamada sbrk () se usa para extender el espacio de direcciones de los procesos, y no hay una llamada análoga que vaya en la otra dirección.