Usando ps, puedo ver el tamaño, el vsize (¿igual que el VIRT de top?) Y el rss (¿igual que el RES de top?). (Uno más que veo en la parte superior es SHR).
¿Podría alguien resumirme lo que significan estos diferentes campos?
Prefiero ver un buen resumen en esta página que un enlace que podría desaparecer para que esta página pueda vivir como referencia.
Jim Hunziker
Respuestas:
34
En breve:
Tamaño virtual: es la cantidad de espacio de direcciones que administra un proceso. El espacio de direcciones virtuales contiene todo lo que el proceso puede acceder a través de punteros (referencias de direcciones de memoria). Por ejemplo, si su programa obtiene acceso al framebuffer de su tarjeta de video, esa memoria se asigna al espacio virtual del proceso y recibe una dirección que se almacena en un puntero. Los archivos asignados en memoria y las asignaciones anónimas también se contabilizan en el tamaño del espacio de direcciones virtuales. Casi todo está en el tamaño virtual. Si suma el tamaño de todos los rangos de direcciones enumerados /proc/<pid>/maps, debería devolverle aproximadamente el mismo valor del tamaño virtual.
Tamaño residente: es la cantidad de memoria que pertenece específicamente a ese proceso que actualmente reside en la memoria. Eso significa, la cantidad de memoria que no está en el intercambio. Tenga en cuenta que partes del proceso pueden estar en la memoria de intercambio incluso cuando el proceso se está ejecutando. El sistema operativo extraerá estas regiones del intercambio cuando el proceso intente acceder a él. Esto debe incluir el montón, las pilas de todos los subprocesos y otras asignaciones privadas. Si nos fijamos en /proc/<pid>/maps, las [stack], [heap]y otras asignaciones anónimos (sin esas rutas de archivos) o bien se intercambian o valoradas en el tamaño residente.
Tamaño compartido: es la cantidad de memoria que puede pertenecer a múltiples procesos. Por ejemplo, si tiene cuatro instancias de la misma aplicación cargada en la memoria, tendrá cuatro instancias del montón y al menos cuatro pilas, una para cada proceso (esta es la memoria residente), pero solo tendrá una instancia de El código binario del programa y sus bibliotecas. Este es el espacio compartido. No solo incluye el código binario del programa y sus bibliotecas, sino también archivos de localización, datos de programa de solo lectura, segmentos de memoria compartida SysV y POSIX, semáforos, etc. Si observa /proc/<pid>/maps, la mayoría de las asignaciones vinculadas a la biblioteca y los archivos de programa son compartido.
Tenga en cuenta que VIRT contiene la unión de RSS y SHR, y siempre será mayor que cualquiera de ellos. Puede haber regiones contabilizadas como RSS y SHR.
Por cierto, en las versiones recientes de Linux puede ver un desglose muy detallado del uso de memoria en / proc / <pid> / smaps
bdonlan
1
El tamaño compartido es la memoria que se puede compartir. Si una aplicación es el único usuario de la biblioteca, la biblioteca se mantendrá en la memoria mediante un solo proceso. De esta manera, incluso la memoria compartida puede ser memoria "propiedad del proceso".
Hubert Kario
6
En Juliano responde:
Tenga en cuenta que RSS + SHR <= VIRT, siempre.
Esto es simplemente falso. SHR contiene toda la memoria virtual que podría compartirse con otros procesos, y RSS contiene toda la memoria física en la RAM que utiliza el proceso.
Por lo tanto, toda la memoria compartida actualmente en RAM se cuenta tanto en SHR como en RSS, por lo que SHR + RSS no tiene sentido ya que puede contener recuentos duplicados.
Para construir un proceso con RSS + SHR> VIRT, simplemente mmap un archivo grande (1GB), luego léalo completamente: el archivo mmaped se cargará en RAM, y VIRT, SHR y RSS serán cada uno un poco más grandes que 1GB, entonces SHR + RSS> VIRT.
Sí, fue más una declaración sobre VIRT que las otras dos. Lo que tenía en mente era más sobre la unión de RSS y SHR que su suma, es decir, VIRT contiene RSS y SHR. Mala representación matemática.
Respuestas:
En breve:
Tamaño virtual: es la cantidad de espacio de direcciones que administra un proceso. El espacio de direcciones virtuales contiene todo lo que el proceso puede acceder a través de punteros (referencias de direcciones de memoria). Por ejemplo, si su programa obtiene acceso al framebuffer de su tarjeta de video, esa memoria se asigna al espacio virtual del proceso y recibe una dirección que se almacena en un puntero. Los archivos asignados en memoria y las asignaciones anónimas también se contabilizan en el tamaño del espacio de direcciones virtuales. Casi todo está en el tamaño virtual. Si suma el tamaño de todos los rangos de direcciones enumerados
/proc/<pid>/maps
, debería devolverle aproximadamente el mismo valor del tamaño virtual.Tamaño residente: es la cantidad de memoria que pertenece específicamente a ese proceso que actualmente reside en la memoria. Eso significa, la cantidad de memoria que no está en el intercambio. Tenga en cuenta que partes del proceso pueden estar en la memoria de intercambio incluso cuando el proceso se está ejecutando. El sistema operativo extraerá estas regiones del intercambio cuando el proceso intente acceder a él. Esto debe incluir el montón, las pilas de todos los subprocesos y otras asignaciones privadas. Si nos fijamos en
/proc/<pid>/maps
, las[stack]
,[heap]
y otras asignaciones anónimos (sin esas rutas de archivos) o bien se intercambian o valoradas en el tamaño residente.Tamaño compartido: es la cantidad de memoria que puede pertenecer a múltiples procesos. Por ejemplo, si tiene cuatro instancias de la misma aplicación cargada en la memoria, tendrá cuatro instancias del montón y al menos cuatro pilas, una para cada proceso (esta es la memoria residente), pero solo tendrá una instancia de El código binario del programa y sus bibliotecas. Este es el espacio compartido. No solo incluye el código binario del programa y sus bibliotecas, sino también archivos de localización, datos de programa de solo lectura, segmentos de memoria compartida SysV y POSIX, semáforos, etc. Si observa
/proc/<pid>/maps
, la mayoría de las asignaciones vinculadas a la biblioteca y los archivos de programa son compartido.Tenga en cuenta que VIRT contiene la unión de RSS y SHR, y siempre será mayor que cualquiera de ellos. Puede haber regiones contabilizadas como RSS y SHR.
fuente
En Juliano responde:
Esto es simplemente falso. SHR contiene toda la memoria virtual que podría compartirse con otros procesos, y RSS contiene toda la memoria física en la RAM que utiliza el proceso.
Por lo tanto, toda la memoria compartida actualmente en RAM se cuenta tanto en SHR como en RSS, por lo que SHR + RSS no tiene sentido ya que puede contener recuentos duplicados.
Para construir un proceso con RSS + SHR> VIRT, simplemente mmap un archivo grande (1GB), luego léalo completamente: el archivo mmaped se cargará en RAM, y VIRT, SHR y RSS serán cada uno un poco más grandes que 1GB, entonces SHR + RSS> VIRT.
fuente