ver tengo saber revisar que procesos para memoria mas liberar estado espacio disco consumen como comando chequear linux virtual-memory

tengo - ver memoria ram linux terminal



¿Cómo medir de forma fiable la memoria disponible en Linux? (5)

Al principio encontré su pregunta fácil, ya que en la práctica, la salida de forma free en las columnas ''+ buffers / cache'' es la que uso y normalmente funciona.

Pero una de las situaciones en las que no funciona es cuando tiene una lectura intensa de los mismos bloques. Por ejemplo, leyendo el mismo archivo 1 gb una y otra vez:

while true; do cat 1gb_file >/dev/null; done

Si su sistema tiene> 1 GB de caché, esto se ejecutará rápidamente. Pero si empiezas a usar algo de ese caché para otra cosa, romperá el rendimiento del sistema.

Entonces, cuando evalúe sus soluciones, intente lo anterior y vea si la solución lo tiene en cuenta.

Linux /proc/meminfo muestra una serie de estadísticas de uso de memoria.

MemTotal: 4040732 kB MemFree: 23160 kB Buffers: 163340 kB Cached: 3707080 kB SwapCached: 0 kB Active: 1129324 kB Inactive: 2762912 kB

Hay un poco de superposición entre ellos. Por ejemplo, por lo que entiendo, puede haber un caché de páginas activo (pertenece a "caché" y "activo") y un caché de páginas inactivo ("inactivo" + "cacheado").

Lo que quiero hacer es medir la memoria "libre", pero de una manera que incluya páginas usadas que probablemente se eliminarán sin un impacto significativo en el rendimiento general del sistema.

Al principio, me incliné a usar "gratis" + "inactivo", pero la utilidad "libre" de Linux usa "gratis" + "en caché" en su pantalla "ajustada en el búfer", así que tengo curiosidad por saber cuál es un mejor enfoque.

Cuando el kernel se queda sin memoria, ¿cuál es la prioridad de las páginas para soltar y cuál es la métrica más adecuada para medir la memoria disponible?


Dado que lo que significa exactamente "memoria disponible" depende de su propósito, y su propósito es evitar las situaciones de OOM:

Vea cómo Qt Extended (anteriormente Qtopia) anticipa las situaciones de OOM.

Hay dos eventos:

  • (MemFree + Buffers + Cached) / MemTotal <treshold (en /proc/meminfo )
  • Principales resultados de página> dominio (pgmajfault en /proc/vmstat , creo)

La primera es una advertencia temprana de que la memoria es baja y desencadena un monitoreo más frecuente de los resultados de página. La segunda señal de eliminación de basura, que mata el rendimiento del sistema y es un buen indicio de que el asesino OOM se ejecutará.


Desde linux-3.14 hay una nueva métrica MemAvailable en / proc / meminfo.

Y verifique la línea ''- / + buffers / cache:'' en la salida de la utilidad gratuita.


Yo diría que es difícil medir qué páginas, cuando se tiran, causan que el sistema tenga un "impacto significativo en el rendimiento general del sistema". Las páginas en uso por los procesos del usuario serían (Total) - (Gratis + En caché + Paginado). El segundo término es toda la memoria que el núcleo podría liberar si fuera necesario. Sin embargo, liberar las páginas de memoria que se utilizan para el caché y las páginas tendría un impacto significativo en el rendimiento general del sistema.

Si fuera a utilizar una heurística, diría que debería tomar el valor de "Inactivo", que es "La cantidad total de búfer o memoria caché de la página, en kilobytes, que son gratis y están disponibles. Esta es la memoria que tiene no ha sido utilizado recientemente y puede ser reclamado para otros fines ". Si descubre que toma eso y el sistema continúa funcionando bien, podría estimar un porcentaje de "Activo" para tomarlo como una conjetura también porque el sistema podría haber usado algunas páginas recientemente pero no las va a usar nuevamente. Sabes más sobre el sistema que yo. Si el sistema está dedicado a lo que sea que esté a punto de hacer, entonces las páginas y los archivos en caché en Active que se usarán pronto dependerán de si el sistema se usó recientemente para otra cosa.


Yo uso lo siguiente:

FREE_KB = MemFree + Buffers + Cached FREE_KB=$(($(echo `sed -n ''2p;3p;4p'' < /proc/meminfo | sed "s/ /+/ /g" | cut -d'' '' -f 2 ` | sed "s/ /+/g"))) USED_KB = MemTotal - MemFree - Buffers - Cached USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ /+/ /g" | cut -d'' '' -f 2 ` | sed "s/ /-/g")))