Estou digitando um shell script para descobrir a memória física total em algumas caixas de linux do RHEL.
Antes de tudo, quero enfatizar que estou interessado na memória física total reconhecida pelo kernel, não apenas na memória disponível . Portanto, evite respostas sugerindo ler / proc / meminfo ou usar os comandos free , top ou sar - Em todos esses casos, seus valores de " memória total " significam valores de " memória disponível ".
O primeiro pensamento foi ler as mensagens do kernel de inicialização:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Mas em algumas caixas Linux, devido ao uso do software PowerPath da EMC2 e às mensagens de inicialização inundadas na inicialização do kernel, essa mensagem útil do kernel de inicialização não está disponível, nem mesmo no arquivo / var / log / dmesg .
A segunda opção foi o comando dmidecode (sou avisado contra a possível incompatibilidade entre a RAM reconhecida pelo kernel e a RAM real devido às limitações de alguns kernels e arquiteturas mais antigos). A opção --memory simplifica o script, mas percebi que versões mais antigas desse comando não têm opção --memory .
Minha última chance foi o comando getconf . Ele relata o tamanho da página da memória, mas não o número total de páginas físicas - a variável de sistema _PHYS_PAGES parece ser a página física disponível, e não o total de páginas físicas.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Minha pergunta: Existe outra maneira de obter a quantidade total de memória física, adequada para ser analisada por um script de shell?
fonte
Respostas:
Se você estiver interessado na RAM física, use o comando
dmidecode
. Ele fornece muito mais informações do que apenas isso, mas, dependendo do seu caso de uso, você também pode querer saber se o 8G no sistema vem de sticks de 2x4GB ou de 4x2GB.fonte
Você já tentou
cat /proc/meminfo
? Você pode então awk ou grep o que você quer, MemTotal egou
fonte
awk '/MemTotal/ {print $2}' /proc/meminfo
Quanto menos tubos, melhor.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
é padronizado por POSIX, masgrep
's opções-o
e-P
não são! Seu exemplo funcionará bem com o GNUgrep
(mas o GNU ainda diz que a implementação do PCRE é experimental), mas provavelmente não funcionará com outras implementações.cat /proc/meminfo | grep MemTotal
ou grátis, fornece a quantidade exata de RAM que seu servidor possui. Isso não é "memória disponível".Acho que seu problema surge quando você tem uma VM e gostaria de calcular a quantidade total de memória hospedada pelo hipervisor, mas terá que efetuar login no hipervisor nesse caso.
é equivalente a
fonte
cat /proc/meminfo | grep MemTotal
relatórios de memória de 4 GBMemTotal: 3957032 kB
, isso é um pouco menos que 4 GB. O OP (e eu) estamos procurando por algo que reportaria 4 GB.grep MemTotal /proc/meminfo
3957032 kB
está apenas rotulado incorretamente . Deve ser rotulado como kiB, conforme indicado neste post . Isso significa que está realmente relatando 4.052.000.768 bytes, que é um pouco maior que 4 GB. Isso ocorre porque as implementações / proc / meminfo são anteriores à notação kiB./proc/meminfo
relatar números no kiB é uma parte extremamente importante dessa discussão, independentemente de o @TvE pretender fazer uma pergunta diferente.Adicione as 2 últimas entradas de
/proc/meminfo
, elas fornecem a memória exata presente no host.Exemplo:
10240 + 4184064 = 4194304 kB = 4096 MB.
fonte
Mais um comando útil:
vmstat -s | grep memory
saída de amostra na minha máquina é:
Outro comando útil para obter informações de memória é: a
free
saída de amostra é:
Uma observação aqui é que, o comando também
free
fornece informações sobre o espaço de troca.O link a seguir pode ser útil para você:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
fonte
vmstat -s -S M | grep ' memory'
Isso fornecerá a memória total do seu sistema em formato legível por humanos e será dimensionado automaticamente para a unidade apropriada (por exemplo, bytes, KB, MB ou GB).
fonte
A adição de todos os valores acima exibidos após "Tamanho:" fornecerá o tamanho físico total exato de todos os sticks de RAM no servidor.
fonte
Memória online total
Calcule a memória online total usando o sys-fs.
Exemplo de saída para sistema de 4 GB:
Explicação
Número de bytes em um bloco de memória (valor hexadecimal). Usar 0x na frente do valor garante que ele seja tratado adequadamente durante o cálculo.
Iterando sobre todos os blocos de memória disponíveis para verificar se estão online e adicione o tamanho calculado do bloco ao totalmem, se estiverem.
Você pode alterar ou remover isso se preferir outro estado da memória.
fonte
\
) para continuar na próxima linha - na verdade, você pode usar o&&
no final da linha para esse fim.Memória total em
Mb
:ou:
fonte
Estas são as maneiras:
1. / proc / meminfo
Você pode escrever um código ou script para analisá-lo.
2. Use o sysconf usando as macros abaixo
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Usando a chamada de sistema sysinfo
int sysinfo (estrutura sysinfo * info);
struct sysinfo {.
fonte
Eu acho
htop
uma ferramenta útil.e depois
fornecerá as informações necessárias.
fonte