GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿necesita una explicación sobre el tamaño del conjunto residente/tamaño virtual?

Encontré que pidstat sería una buena herramienta para monitorear procesos. Quiero calcular el uso promedio de memoria de un proceso en particular. Aquí hay una salida de ejemplo:

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Esto es parte de la salida de pidstat -r -p 7276 .)

¿Debo usar la información de tamaño del conjunto residente (RSS) o tamaño virtual (VSZ) para calcular el consumo promedio de memoria? He leído algunas cosas en Wikipedia y en foros, pero no estoy seguro de entender completamente las diferencias. Además, parece que ninguno de ellos es confiable. Entonces, ¿cómo puedo monitorear un proceso para obtener su uso de memoria?

Cualquier ayuda sobre este asunto sería útil.

Respuesta aceptada:

RSS es la cantidad de memoria que este proceso tiene actualmente en la memoria principal (RAM). VSZ es la cantidad de memoria virtual que tiene el proceso en total. Esto incluye todos los tipos de memoria, tanto en RAM como intercambiada. Estos números pueden distorsionarse porque también incluyen bibliotecas compartidas y otros tipos de memoria. Puede tener quinientas instancias de bash ejecutándose, y el tamaño total de su huella de memoria no será la suma de sus valores RSS o VSZ.

Si necesita obtener una idea más detallada sobre la huella de memoria de un proceso, tiene algunas opciones. Puede pasar por /proc/$PID/map y elimina las cosas que no te gustan. Si se trata de bibliotecas compartidas, el cálculo podría volverse complejo dependiendo de sus necesidades (que creo recordar).

Si solo le importa el tamaño del montón del proceso, siempre puede analizar el [heap] entrada en el map expediente. El tamaño que el kernel ha asignado para el montón del proceso puede o no reflejar la cantidad exacta de bytes que el proceso pidió. para ser asignado. Hay detalles minuciosos, elementos internos del kernel y optimizaciones que pueden descartar esto. En un mundo ideal, será tanto como necesite su proceso, redondeado al múltiplo más cercano del tamaño de la página del sistema (getconf PAGESIZE le dirá cuál es:en las PC, probablemente sean 4096 bytes).

Si desea ver cuánta memoria ha asignado un proceso , una de las mejores formas es renunciar a las métricas del lado del kernel. En su lugar, instrumenta las funciones de asignación (des)asignación de memoria de almacenamiento dinámico de la biblioteca C con LD_PRELOAD mecanismo. Personalmente, abuso un poco de valgrind para obtener información sobre este tipo de cosas. (Tenga en cuenta que la aplicación de la instrumentación requerirá reiniciar el proceso).

Relacionado:Linux:borré accidentalmente la carpeta /root y ahora la cadena de shell es diferente. ¿Lo que da?

Tenga en cuenta que, dado que también puede realizar evaluaciones comparativas de los tiempos de ejecución, valgrind hará que sus programas sean un poco más lentos (pero probablemente dentro de sus tolerancias).


Linux
  1. Cambiar el tamaño de una ventana a un tamaño establecido en Linux

  2. ¿Número máximo de subprocesos por proceso en Linux?

  3. Cómo verificar el tamaño del montón para un proceso en Linux

  4. registro de la marca de agua máxima de la memoria RAM de un proceso de Linux

  5. Necesita explicación sobre el tamaño del conjunto residente/tamaño virtual

Swappiness en Linux:Todo lo que necesitas saber

Cómo verificar el tamaño de RAM en la línea de comandos de Linux en Gb

Cómo extender el tamaño del disco de la máquina virtual KVM en Linux

Encuentra el tamaño de RAM en Linux

Uso máximo de memoria de un proceso Linux/Unix

Uso de memoria del proceso actual en C