2011-10-24 13 views
197

¿Qué son RSS y VSZ en la gestión de memoria de Linux? En un entorno multiproceso, ¿cómo se pueden gestionar y rastrear ambos?Qué es RSS y VSZ en la gestión de memoria de Linux

+0

posible duplicado de [Entendiendo los registros de asesino de Linux] (http://stackoverflow.com/questions/9199731/understanding-the-linux-oom-killers-logs) – msangel

Respuesta

0

No se gestionan, pero se miden y posiblemente se limitan (consulte la llamada al sistema getrlimit, también en getrlimit(2)).

RSS significa resident set size (la parte de su espacio de direcciones virtual se encuentra en RAM).

Puede consultar la virtual address space del proceso 1234 usando proc(5) con cat /proc/1234/maps y su estado (incluyendo el consumo de memoria) a través de cat /proc/1234/status

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/18966880) – Maak

+0

Proporcioné un segundo enlace. Uno de ellos se mantendrá válido –

36

RSS es conjunto residente Tamaño (memoria residente físicamente - este espacio está ocupando actualmente en la memoria física de la máquina), y VSZ es el tamaño de la memoria virtual (espacio de dirección asignado - esto tiene direcciones asignadas en el mapa de la memoria del proceso, pero no hay necesariamente memoria real detrás de todo en este momento).

Tenga en cuenta que en estos días de máquinas virtuales comunes, la memoria física desde el punto de vista de la máquina puede no ser realmente la memoria física real.

+0

¿Te importa proporcionar más información de lo que significa la abreviatura? – Pithikos

282

RSS es el tamaño del conjunto de residentes y se utiliza para mostrar la cantidad de memoria asignada a ese proceso y está en la memoria RAM. No incluye la memoria que se intercambia. Incluye memoria de bibliotecas compartidas siempre que las páginas de esas bibliotecas estén realmente en la memoria. Incluye toda la pila y memoria de montón.

VSZ es el tamaño de la memoria virtual. Incluye toda la memoria a la que puede acceder el proceso, incluida la memoria que se intercambia y la memoria que proviene de bibliotecas compartidas.

Entonces, si el proceso A tiene un binario de 500K y está vinculado a 2500K de bibliotecas compartidas, tiene 200K de asignaciones de pila/montón de las cuales 100K están en realidad en memoria (el resto se intercambia) y solo ha cargado 1000K del compartido bibliotecas y 400K de su propia binaria a continuación:

RSS: 400K + 1000K + 100K = 1500K 
VSZ: 500K + 2500K + 200K = 3200K 

Dado que parte de la memoria es compartida, muchos procesos pueden usar, por lo que si se suman todos los valores de RSS se puede acabar fácilmente con más espacio que su sistema tiene.

También hay PSS (tamaño de conjunto proporcional). Esta es una medida más nueva que rastrea la memoria compartida como una proporción utilizada por el proceso actual. Así que si había dos procesos que utilizan la misma biblioteca compartida desde antes:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K 

hilos comparten el mismo espacio de direcciones, por lo que el RSS, VSZ y PSS para cada hilo es idéntica a todos los otros hilos en el proceso de . Use ps o top para ver esta información en linux/unix.

No hay manera más que esto, para obtener más información consultar las siguientes referencias:

Ver también:

+8

Creo que RSS * does * incluye memoria de bibliotecas vinculadas dinámicamente. Si hay 3 procesos que usan 'libxml2.so', la biblioteca compartida se contará en cada uno de sus RSS, por lo que la suma de sus RSS será mayor que la memoria real utilizada. – nfm

+1

Eso es correcto. He arreglado mi respuesta, gracias por el aviso. – jmh

+0

Estoy en Ubuntu 16.04, y hay un proceso Java que tiene 1.2G RES y 4.5G VIRT mostrando desde el comando 'top'. Este sistema no tiene ningún intercambio, 'swapon --show' no devuelve nada. ¿Cómo explicas esto? Si vsz es swap + bibliotecas compartidas, en este caso, las bibliotecas compartidas tienen más de 3.3G? ¿Es posible? Realmente confundido ... –

1

Creo que ya se ha dicho mucho sobre RSS vs VSZ. Desde la perspectiva de un administrador/programador/usuario, cuando diseño/codigo aplicaciones estoy más preocupado por la RSZ, (memoria residente), a medida que sigue tirando de más y más variables (amontonadas) verá que este valor aumenta. Pruebe un programa simple para construir la asignación de espacio basado en malloc en bucle, y asegúrese de llenar los datos en ese espacio malloc. RSS sigue subiendo. En lo que respecta a VSZ, es más la asignación de memoria virtual que Linux, y una de sus características principales derivada de los conceptos convencionales del sistema operativo. La administración de VSZ se realiza mediante la gestión de la memoria virtual del núcleo, para obtener más información sobre VSZ, consulte la descripción de Robert Love en mm_struct y vm_struct, que son parte de la estructura de datos task_struct básica en kernel.