¿Cómo utilizar la memoria (RAM utilizada) usando el comando de Linux?

30

Estoy tratando de recuperar la memoria utilizada (RAM) en porcentaje usando comandos de Linux. Mi cpanel muestra la memoria utilizada que necesito mostrar en una página web en particular.

En los foros, descubrí que se puede encontrar la memoria correcta de lo siguiente:

free -m

Resultado:

-/+ buffers/cache:        492       1555

- / + buffers / cache: contiene el uso correcto de la memoria. No sé cómo analizar esta información o si hay algún comando diferente para obtener la memoria utilizada en porcentaje.

codelogn
fuente
3
Eso ya fue respondido aquí! stackoverflow.com/questions/10585978/… por ejemplo: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher
@szboardstretcher Me gusta este:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me
Sin saber para qué necesita el número, es difícil decirle qué número debe usar. Sin embargo, en muchos casos, cualquiera de esos números es muy ingenuo y requiere información de tendencias y contexto.
Eckes

Respuestas:

33

Aquí está la salida de muestra de forma gratuita:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

La primera línea de números ( Mem:) enumera

  • total memoria
  • used memoria
  • free memoria
  • uso de shared
  • uso de buffers
  • uso de cachés del sistema de archivos ( cached)

En esta línea used incluye los búferes y el caché y esto impacta gratis. Esta no es su memoria libre "verdadera" porque el sistema volcará el caché si es necesario para satisfacer las solicitudes de asignación.

La siguiente línea ( -/+ buffers/cache:) nos da la memoria libre y usada real como si no hubiera buffers o caché.

La línea final ( Swap) proporciona el uso de la memoria de intercambio. No hay memoria intermedia o caché para el intercambio, ya que no tendría sentido colocar estas cosas en un disco físico.

Para generar la memoria usada (menos buffers y caché) puede usar un comando como:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Esto toma la tercera línea y divide el uso / total * 100.

Y para memoria libre:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657
casey
fuente
1
¿Es "- / + buffers / cache: 5779440 18904464" el uso / estado correcto de RAM del servidor?
codelogn
2
Estrictamente hablando, no, pero prácticamente hablando, sí. El uso real de la memoria es la segunda línea (utilizada: 20746840), pero parte del uso de la memoria son buffers y caché que son solo para acelerar los tiempos de respuesta en su sistema. La tercera línea (usada: 5779440) le brinda la cantidad de memoria realmente utilizada por los programas y es esta cifra de memoria la que determina cuánto más pueden asignar sus programas. Si su objetivo es obtener memoria libre / usada en el sentido de qué programas están realmente usando y qué puede realmente asignar, entonces sí, la línea 3 es la correcta para usted.
casey
1
Tenga en cuenta que con las versiones más recientes de free, -/+ buffers/cachese omite completamente intencionalmente, y el valor que se muestra en la usedcolumna ahora excluye los búferes y la memoria caché de forma predeterminada. Ver aquí: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson
10

Voy a mencionar cómo analizar la información en el freecomando. Para encontrar el porcentaje, puede usar como se sugiere en las otras 2 respuestas.

Esto se explica claramente aquí . Trataría de explicar lo que tengo en mi sistema.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Ahora, veamos qué representan realmente los diversos números.

Línea 1

  • 7869 Indica memoria / RAM física disponible para mi máquina.
  • 4402 Indica la memoria / RAM utilizada por mi sistema.
  • 3466 Indica RAM total libre y disponible para que se ejecute un nuevo proceso.
  • 0 Indica memoria compartida. Esta columna está obsoleta y puede eliminarse en futuras versiones gratuitas.
  • 208 Indica RAM total almacenada en búfer por diferentes aplicaciones en Linux.
  • 3497 Indica la RAM total utilizada para el almacenamiento en caché de datos para fines futuros.

Línea 2

-/+ buffers/cache:        696       7173

¿Cómo calcular los valores 696 y 7173 obtenidos en Line2?

Total utilizado ( 4402 ) - RAM total del búfer ( 208 ) - La RAM total para el almacenamiento en caché ( 3497 ) debe constituir la RAM real utilizada en el sistema. Me devuelve 697, que es la salida RAM real utilizada en la segunda línea.

Ahora, Total disponible ( 7869 ) - Real utilizado ( 696 ) debería darle la memoria libre que es 7173 en este caso, que también se obtiene como salida en la segunda línea.

Ramesh
fuente
6

Aunque es un duplicado según lo señalado por @szboardstretcher, mi preferencia de las soluciones (en la pregunta original) es la siguiente, especialmente porque desea analizar a una página web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Salida:

used: 82.68%, buffers: 42.81%, swap: 1.27%
Simplemente yo
fuente
44
FYI obtengo lo siguiente usando estoused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj
¿Para qué se usa el comando completo? Lo revisé en centos.
Simply_Me
Perdón por el formato, pero aquí tienes$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj
Para algunas versiones de awk (mawk), el signo de porcentaje debe duplicarse para imprimirlo; de lo contrario, awk arroja un error como este: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Esto funciona con tanto mawk como gawk.
Ján Lalinský
2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Agrega una nueva línea después del número de intercambio

Andy
fuente
1

Para hasta CentOS 7 puede probar

cat /proc/meminfo 

para ver el uso real de la memoria por procesos.

Cosmo Arun
fuente