Eu atravesseiEste artigo, que explica vários métodos para verificar o uso de RAM. No entanto, não consigo conciliar os diferentes métodos e não sei qual deles é o correto.
Quando faço login pela primeira vez, sou recebido com uma tela como esta:
System information as of Sun Apr 28 21:46:58 UTC 2013
System load: 0.0 Processes: 76
Usage of /: 15.6% of 7.87GB Users logged in: 1
Memory usage: 41% IP address for eth0:
Swap usage: 0%
Isso sugere que estou usando 41% da minha RAM, o que parece bastante alto, já que o servidor não está fazendo muito. Ou esse número se refere a algo além de RAM?
Em seguida, tento o free -m
método:
ubuntu@ip-:~$ free -m
total used free shared buffers cached
Mem: 590 513 76 0 67 315
-/+ buffers/cache: 130 459
Swap: 0 0 0
De acordo com o gráfico explicativo do artigo, isso implica que tenho 130 MB de RAM usada e 459 MB de RAM livre, o que sugere que estou usando cerca de 22% da minha RAM.
Em seguida eu corro top
:
top - 22:14:48 up 195 days, 21:30, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 97.7%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 604376k total, 525692k used, 78684k free, 69124k buffers
Swap: 0k total, 0k used, 0k free, 322740k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24332 1864 976 S 0.0 0.3 0:08.75 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
Isso é o mais confuso, pois o resumo me mostra usando 525MG de um total de 604M, e ainda assim quando uso o comando interativo "m" para classificar pela memória superior o processo principal está usando apenas 0,3% da memória ???
Finalmente, o ps
comando também parece mostrar muito pouco uso de memória:
root@ip-:/home/ubuntu# ps -o command,rss
COMMAND RSS
ps -o command,rss 788
sudo su root 1764
su root 1404
bash 2132
Eu adoraria que alguém corrigisse quaisquer mal-entendidos que tenho e que estão criando esses aparentes conflitos.
Obrigado!
EDITAR para Rahul
Saída de cat /proc/meminfo
:
MemTotal: 604376 kB
MemFree: 157564 kB
Buffers: 49640 kB
Cached: 231376 kB
SwapCached: 0 kB
Active: 290040 kB
Inactive: 97772 kB
Active(anon): 107672 kB
Inactive(anon): 4844 kB
Active(file): 182368 kB
Inactive(file): 92928 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 52 kB
Writeback: 0 kB
AnonPages: 106836 kB
Mapped: 22920 kB
Shmem: 5712 kB
Slab: 42032 kB
SReclaimable: 34016 kB
SUnreclaim: 8016 kB
KernelStack: 688 kB
PageTables: 3584 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 302188 kB
Committed_AS: 242768 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7152 kB
VmallocChunk: 34359729008 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 637952 kB
DirectMap2M: 0 kB
Responder1
Você só precisa entender o conceito de memória
De acordo com sua saída de /proc/meminfo , você só precisa observar as coisas abaixo:
Buffers:- Um buffer é algo que ainda precisa ser "gravado" no disco. Representa quanta RAM é dedicada ao bloco de disco em cache. "Cached" é semelhante a "Buffers", só que desta vez ele armazena em cache as páginas da leitura de arquivos
Em cache:- Um cache é algo que foi “lido” do disco e armazenado para uso posterior. Geralmente, você pode considerar a área de cache como outra RAM "livre", pois ela será reduzida gradualmente se o aplicativo exigir mais memória.
Basta entender que tanto “buffers” quanto “Cached” representam o tamanho do cache do sistema. Eles aumentam ou diminuem dinamicamente conforme solicitado pelo mecanismo interno do kernel do Linux.
na Webhosting eles limpam o cache usando o cmd abaixo: (principalmente configurado no cron):
sync && echo 3 > /proc/sys/vm/drop_caches
CitarLink
EDIT para mais um requisito, ou seja, uso de memória por usuário
#!/bin/bash
total_mem=0
printf "%-10s%-10s\n" User MemUsage
while read u m
do
[[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
total_mem=$(echo $m + $total_mem | bc);
old_user=$u
done < <(ps --no-headers -eo user,%mem| sort -k1)
#--EOF
Por favor, verifique o script acima e me avise se ele está aparecendo corretamente ou não.
Responder2
Boa resposta @RahulPatil.
Outro ponto a considerar sobre ps ou top é o seguinte
Esta ferramenta [exmap] é mais precisa que ps ou top porque leva em consideração bibliotecas compartilhadas em uso por vários aplicativos. Por exemplo, se dois aplicativos estiverem usando a mesma biblioteca compartilhada, que ocupa 1 MB de memória, ps mostrará ambos os aplicativos usando 1 MB de memória extra, enquanto exmap mostrará mais corretamente cada aplicativo usando 500 KB. Esta maior precisão é particularmente importante para avaliar ambientes de desktop como KDE e GNOME, que fazem uso intenso de bibliotecas compartilhadas entre aplicativos.
Através daibm/developerworks/linux_memory
Como sua pergunta se refere a um servidor headless, não tenho certeza de quanto relatório duplo top ou ps realmente terá.
Responder3
Temo que estejamos negligenciando o óbvio porque é um "é claro" para a maioria de nós.
Jonah, perdoe-me se estiver errado, mas suas perguntas parecem que você pode não ter percebido que todos esses valores, em particular o uso da CPU, normalmente variam bastante de segundo para segundo.
O uso da CPU pode ir de um dígito a 100% instantaneamente quando um novo processo é iniciado, mas rapidamente (espero) voltar para a faixa abaixo de 50%.
O uso da memória muda mais lentamente, mas o Linux tenta usar a memória que não está em uso ativo, executando processos para "armazenar em cache" os acessos ao disco. Por exemplo, ele tenta prever o que precisará ser lido a seguir no disco, como talvez o restante de um arquivo grande após a leitura de uma parte, e pré-carregá-lo no cache. Alguns dos valores de uso de memória incluem a memória usada pelos processos e também a memória usada para armazenamento em cache. Em um sistema que já está em execução há algum tempo, os dois combinados provavelmente serão de 80 a 90% ou mais.
Considere também que o processo executado para mostrar o uso, como top
, também usa CPU e memória. Se você escrevesse um script com um loop para relatar o uso da CPU continuamente, quase certamente sempre mostraria 100% porque o próprio ato de relatar o uso (sem alguns sleep
atrasos) usa toda a CPU.