tengo - ¿Cómo puedo averiguar la memoria física total(RAM) de mi linux box adecuada para ser analizada por un script de shell?
ver memoria ram ubuntu (11)
Estoy escribiendo un script de shell para averiguar la memoria física total en algunos cuadros de Linux RHEL.
Antes que nada quiero enfatizar que estoy interesado en la memoria física total reconocida por kernel, no solo en la memoria disponible . Por lo tanto, evite las respuestas sugiriendo leer / proc / meminfo o usar los comandos free , top o sar - En todos estos casos, sus valores de " memoria total " significan los de " memoria disponible ".
La primera idea fue leer los mensajes del kernel de arranque:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Pero en algunos linux boxes, debido al uso del software PowerPath de EMC2 y sus mensajes de inicio de inundación en el inicio del kernel, ese útil mensaje de kernel de arranque no está disponible, ni siquiera en el archivo / var / log / dmesg .
La segunda opción fue el comando dmidecode (estoy advertido de la posible falta de coincidencia entre la RAM reconocida por el kernel y la RAM real debido a las limitaciones de algunas kernel y arquitecturas antiguas). La opción --memory simplifica el script, pero me di cuenta de que las versiones anteriores de ese comando no tienen --memory option.
Mi última oportunidad fue el comando getconf . Informa el tamaño de la página de memoria, pero no el número total de páginas físicas: la variable del sistema _PHYS_PAGES parece ser las páginas físicas disponibles, no las páginas físicas totales.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Mi pregunta: ¿hay alguna otra manera de obtener la cantidad total de memoria física, adecuada para ser analizada por un script de shell?
¿Has probado el cat /proc/meminfo
? A continuación, puede grep lo que quiere, MemTotal por ejemplo,
Ejemplo actualizado (por cierto, gracias, Masta):
awk ''/MemTotal/ {print $2}'' /proc/meminfo
Agregue las últimas 2 entradas de /proc/meminfo
, le dan la memoria exacta presente en el host.
Ejemplo:
DirectMap4k: 10240 kB
DirectMap2M: 4184064 kB
10240 + 4184064 = 4194304 kB = 4096 MB.
Encuentro htop
una herramienta útil.
sudo apt-get install htop
y entonces
libre -m
le dará la información que necesita.
Memoria total en Mb
:
x=$(awk ''/MemTotal/ {print $2}'' /proc/meminfo)
echo $((x/1024))
o:
x=$(awk ''/MemTotal/ {print $2}'' /proc/meminfo) ; echo $((x/1024))
Si está interesado en la RAM física, use el comando dmidecode
. Le brinda mucha más información que solo eso, pero dependiendo de su caso de uso, también podría querer saber si el 8G en el sistema viene de palos de 2x4GB o palos de 4x2GB.
Un comando más útil:
vmstat -s | grep memory
muestra de salida en mi máquina es:
2050060 K total memory
1092992 K used memory
743072 K active memory
177084 K inactive memory
957068 K free memory
385388 K buffer memory
Otro comando útil para obtener información de la memoria es:
free
muestra de salida es:
total used free shared buffers cached
Mem: 2050060 1093324 956736 108 385392 386812
-/+ buffers/cache: 321120 1728940
Swap: 2095100 2732 2092368
Una observación aquí es que, el comando free
proporciona información sobre el espacio de intercambio.
El siguiente enlace puede serle útil:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
cat /proc/meminfo | grep MemTotal
cat /proc/meminfo | grep MemTotal
o free te da la cantidad exacta de RAM que tu servidor tiene. Esto no es "memoria disponible".
Supongo que su problema surge cuando tiene una máquina virtual y desea calcular la cantidad total de memoria alojada por el hipervisor, pero tendrá que iniciar sesión en el hipervisor en ese caso.
cat /proc/meminfo | grep MemTotal
es equivalente a
getconf -a | grep PAGES | awk ''BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}''
Estas son las formas:
1. / proc / meminfo
MemTotal: 8152200 kB
MemFree: 760808 kB
Puede escribir un código o script para analizarlo.
2. Use sysconf usando las macros siguientes
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Al usar la llamada al sistema sysinfo
int sysinfo (struct sysinfo * info);
struct sysinfo {.
.
unsigned long totalram; /*Total memory size to use */
unsigned long freeram; /* Available memory size*/
.
.
};
dmidecode -t 17 | grep Size:
Agregar todos los valores anteriores que se muestran después de "Tamaño:" dará el tamaño físico total exacto de todas las RAM en el servidor.
free -h | awk ''/Mem/:/ { print $2 }''
Esto le proporcionará la memoria total de su sistema en formato legible para las personas y se escalará automáticamente a la unidad adecuada (por ejemplo, bytes, KB, MB o GB).
free -m | awk ''/Mem:/{print $2}''