¿Cómo obtener la cantidad de 'Memoria comprimida', por proceso (desde la Terminal)?

¿Cómo puedo usar ps, o alguna variación del mismo... para obtener un valor que corresponda aproximadamente al valor de "Memoria comprimida" que informa Apple en Activity Monitor.app?

ingrese la descripción de la imagen aquí

username 52036 100.1 24.1 8026832 3035512 ?? Rs ...com.apple.WebKit.WebContent

Ok, lo que aparece ps auxnos dice...

  • 3035512, alias 2.83 Gb, que corresponde a "Memoria Privada"
  • 8026832, alias 7.48 Gbque no parece corresponder a nada . (Aunque posiblemente podría ser ("Memoria" 3.89+ "Memoria privada" 2.84+ "Memoria comprimida" 1.05)?

¿Hay alguna forma "normal" de acceder a esta métrica, o es solo un valor "mágico" que se le ocurrió a Apple?

Respuestas (3)

No hay nada mágico en la memoria comprimida. Es algo que se agregó a 10.9 como un último paso antes de que el sistema cambie la RAM al almacenamiento. Según John Siracusa , esto cumple tres funciones principales:

La compresión de memoria es un juego triple para Mavericks. Es una victoria de rendimiento; comprimir y descomprimir datos en la RAM es mucho más rápido que leer y escribir en el disco, incluso en un SSD. Es una ganancia de energía; cuanto menos tiempo pase moviendo datos entre la RAM y el disco, más tiempo podrá pasar el sistema en su estado inactivo. Y finalmente, es una ganancia de capacidad; Mavericks puede manejar cargas de trabajo mucho más exigentes que las versiones anteriores de OS X antes de llorar.

En cuanto a obtener los detalles desde la línea de comando, eso puede ser difícil de alcanzar. Los números generales de compresión son fáciles con un par de herramientas:

memory_pressure
vm_stat

No creo que ninguna invocación de pshaga el truco, pero tal vez alguien pueda corregir eso. Puede ver los detalles de implementación en este hilo: valores de vm_compressor_mode (vm.compressor_mode) para la memoria comprimida habilitada en OS X

Lo mejor que puedo conseguirte es mirar toda la memoria "intercambiada y/o comprimida" usando el vmmapcomando. Básicamente, antes del intercambio, las regiones de memoria marcadas para el intercambio se comprimen. Si eso ahorra suficiente espacio para aliviar el algoritmo de intercambio, no ocurre ningún intercambio. De lo contrario, las regiones comprimidas se intercambian al almacenamiento.

vmmap -swapped [PID]

Tendría que manejar la adición de las regiones y no estoy seguro de si el monitor de actividad informa que todo se intercambió y comprimió en la columna que mencionó, pero eso es algo que podría descubrir mediante la inspección y/o el uso de instrumentos de Xcode para correlacionar lo que ve desde la línea de comando con el monitor de actividad para algunos procesos.

Esto funciona para mi :

VAR=`top -l 1 | awk '/processName/  {print $10 }'`

Para obtener memoria comprimida + normal

VAR=`top -l 1 | awk '/processName/  {print $8 + $10 }'`

Monitor de actividad: haga clic en el botón Memoria y, a continuación, seleccione la columna Memoria comprimida.

¿Cómo responde esto a la pregunta sobre cómo acceder a esta información desde la Terminal?