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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top