Estoy escribiendo un script de shell para averiguar la memoria física total en algunos cuadros de Linux RHEL.
En primer lugar, quiero enfatizar que estoy interesado en la memoria física total reconocida por el núcleo, no solo en la memoria disponible . Por lo tanto, evite las respuestas que sugieran leer / proc / meminfo o usar los comandos free , top o sar . En todos estos casos, sus valores de " memoria total " significan " memoria disponible ".
El primer pensamiento fue leer los mensajes del núcleo de arranque:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Pero en algunos cuadros de Linux, 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 inicio no está disponible, ni siquiera en el archivo / var / log / dmesg .
La segunda opción era el comando dmidecode (se me advierte sobre la posible falta de coincidencia de RAM reconocida por el núcleo y RAM real debido a las limitaciones de algunos núcleos y arquitecturas más antiguas). La opción --memory simplifica el script pero me di cuenta de que las versiones anteriores de ese comando no tienen la opción --memory .
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 de sistema _PHYS_PAGES parece ser las páginas físicas disponibles, no las páginas físicas totales.
# getconf -a | grep PÁGINAS PÁGINA 4096 _AVPHYS_PÁGINAS 1049978 _PHYS_PÁGINAS 15466409
Mi pregunta: ¿Hay otra forma de obtener la cantidad total de memoria física, adecuada para ser analizada por un script de shell?
fuente
Respuestas:
Si está interesado en la RAM física, use el comando
dmidecode
. Le brinda mucha más información que eso, pero dependiendo de su caso de uso, es posible que también desee saber si el 8G en el sistema proviene de unidades de 2x4GB o unidades de 4x2GB.fuente
¿Lo has intentado
cat /proc/meminfo
? A continuación, puede awk o grep lo que quiere, MemTotal por ejemplo,o
fuente
awk '/MemTotal/ {print $2}' /proc/meminfo
Cuantas menos tuberías, mejor.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
está estandarizado por POSIX perogrep
las opciones son-o
y-P
no lo son! Su ejemplo funcionará bien con GNUgrep
(pero GNU aún dice que la implementación de PCRE es experimental) pero probablemente no funcionará con otras implementaciones.cat /proc/meminfo | grep MemTotal
o gratis te da la cantidad exacta de RAM que tiene tu servidor. Esto no es "memoria disponible".Supongo que su problema surge cuando tiene una VM y desea calcular la cantidad total de memoria alojada por el hipervisor, pero tendrá que iniciar sesión en el hipervisor en ese caso.
es equivalente a
fuente
cat /proc/meminfo | grep MemTotal
informes de memoria de 4 GBMemTotal: 3957032 kB
, eso es un poco corto de 4 GB. El OP (y yo) estamos buscando algo que informe 4GB.grep MemTotal /proc/meminfo
3957032 kB
está mal etiquetado. Debe etiquetarse como kiB, como se indica en esta publicación . Eso significa que realmente está reportando 4,052,000,768 bytes, que es ligeramente mayor que 4 GB. Esto se debe al hecho de que las implementaciones / proc / meminfo son anteriores a la notación kiB./proc/meminfo
números de informes en kiB es una parte extremadamente importante de esta discusión, independientemente de si @TvE tenía la intención de hacer una pregunta diferente.Agregue las últimas 2 entradas de
/proc/meminfo
, le dan la memoria exacta presente en el host.Ejemplo:
10240 + 4184064 = 4194304 kB = 4096 MB.
fuente
Un comando más útil: la
vmstat -s | grep memory
salida de muestra en mi máquina es:
Otro comando útil para obtener información de la memoria es: la
free
salida de muestra es:
Una observación aquí es que, el comando también
free
proporciona información sobre el espacio de intercambio.El siguiente enlace puede ser útil para usted:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
fuente
vmstat -s -S M | grep ' memory'
Esto le proporcionará la memoria total de su sistema en formato legible para humanos y se escalará automáticamente a la unidad adecuada (por ejemplo, bytes, KB, MB o GB).
fuente
Agregar todos los valores anteriores que se muestran después de "Tamaño:" dará el tamaño físico total exacto de todas las memorias RAM en el servidor.
fuente
Memoria total en línea
Calcule la memoria total en línea usando sys-fs.
Ejemplo de salida para un sistema de 4 GB:
Explicación
Número de bytes en un bloque de memoria (valor hexadecimal). Usar 0x delante del valor asegura que se maneje adecuadamente durante el cálculo.
Iterando sobre todos los bloques de memoria disponibles para verificar que estén en línea y agregue el tamaño de bloque calculado a totalmem si lo están.
Puede cambiar o eliminar esto si prefiere otro estado de memoria.
fuente
\
) para continuar en la siguiente línea; en realidad, puede usar&&
el final de línea para ese propósito.Memoria total en
Mb
:o:
fuente
Estas son las formas:
1. / proc / meminfo
Puede escribir un código o script para analizarlo.
2. Use sysconf usando las macros siguientes
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Mediante el uso de la llamada al sistema sysinfo
int sysinfo (struct sysinfo * info);
struct sysinfo {.
fuente
Encuentro
htop
una herramienta útil.y entonces
le dará la información que necesita.
fuente