Depois de pesquisar, ainda confuso sobre o monitoramento do uso da RAM

10

Passei por este artigo , que explica vários métodos para verificar o uso da RAM. No entanto, não consigo conciliar os diferentes métodos e não sei qual deles está correto.

Quando eu entro 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 eu estou usando 41% da minha RAM, o que parece bastante alto, pois o servidor não está fazendo muito. Ou esse número se refere a algo além da RAM?

Em seguida, tento o free -mmé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 eu tenho 130 MB de RAM usada e 459 MB de RAM livre, o que sugere que eu 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, no entanto, quando é usado o comando interativo "m" para classificar por memória principal, o processo principal usa apenas 0,3% da memória ???

Finalmente, o pscomando parece mostrar muito pouco uso de memória também:

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 qualquer mal-entendido que estivesse criando esses aparentes conflitos.

Obrigado!

EDIT 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
Jonah
fonte
# 1) O comando de cima para ordenar por memória não é m , é M . # 2) Para ver todos os processos, tente ** ps ax -o command, rss **; o que você executou mostra apenas os seus.
tink
Por favor, também nos atualizar saídacat /proc/meminfo
Rahul Patil
5
linuxatemyram.com
Michael Hampton
@ tink, obrigado por essa explicação. Eu tentei ps ax -o rss | awk '{ sum+=$1} END {print sum}'apenas agora e 153156.
Jonah
@RahulPatil, OP atualizado. Observe que os processos em execução podem ser um pouco diferentes dos números originais, mas não devem estar tão distantes. Além disso, o resultado que obtive para você parece não corresponder ao resultado que obtive para refinar no comentário acima. Aqueles foram tirados em apenas alguns minutos.
Jonah

Respostas:

8

Você só precisa entender o conceito de memória

Conforme sua saída de / proc / meminfo, você só precisa observar as seguintes coisas:

Buffers : - Um buffer é algo que ainda precisa ser "gravado" no disco. Ele representa quanta RAM é dedicada ao cache do bloco de disco. "Em cache" é semelhante a "Buffers", só que desta vez ele armazena em cache as páginas da leitura do arquivo

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.

É suficiente entender que os "buffers" e "Cached" representam o tamanho do cache do sistema. Eles crescem ou diminuem dinamicamente, conforme solicitado pelo mecanismo interno do kernel do Linux.

no Webhosting, eles limpam o cache usando o cmd abaixo: (principalmente configurado no cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Link de cotação

EDIT para mais um requisito, ou seja, por uso de memória do 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 com o script acima e deixe-me saber, se está mostrando corretamente ou não.

Rahul Patil
fonte
Obrigado Rahul. Uma pergunta final. Como free -mnão fornece uma maneira de visualizar a memória usada por usuário, qual é a maneira precisa de determinar quanta RAM real está sendo consumida por um usuário específico? Isso aparece ao monitorar seu próprio uso de memória em um servidor compartilhado, por exemplo.
Jonah
@Jonah Eu atualizei .. por favor, verifique e deixe-me saber
Rahul Patil
que script não está funcionando como esperado .. mas eu estou tentando será atualizado em breve
Rahul Patil
@Jonah obrigado por aceitar minha ans .. mas reais obrigado por MichaelHampton ...
Rahul Patil
2

Boa resposta @RahulPatil.

Outro ponto a considerar sobre ps ou top é o seguinte

Essa ferramenta [exmap] é mais precisa que ps ou top, pois leva em conta as 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, o ps mostrará os dois aplicativos usando 1 MB de memória extra, enquanto o exmap mostra mais corretamente cada aplicativo usando 500 KB. Essa maior precisão é particularmente importante para avaliar ambientes de área de trabalho, como o KDE e o GNOME, que fazem muito uso de bibliotecas compartilhadas entre aplicativos.

Via ibm / developerworks / linux_memory

Como sua pergunta se refere a um servidor sem cabeça - não tenho certeza de quanto de relatórios duplos ou de PS realmente haverá.

Yeow_Meng
fonte
0

Receio que possamos ignorar o óbvio, porque é um "claro" para a maioria de nós.

Jonah, perdoe-me se eu estiver errado, mas suas perguntas parecem que você talvez não tenha percebido que todos esses valores, principalmente o uso da CPU, normalmente variam bastante de segundo para segundo.

O uso da CPU pode passar de um dígito a 100% instantaneamente, à medida que um novo processo é iniciado, mas rapidamente (espero) volte ao intervalo 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 do disco a seguir, 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 da memória incluem tanto a memória usada pelos processos quanto a memória usada para armazenar em cache. Em um sistema que está em execução há algum tempo, os dois combinados provavelmente terão 80-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, ele quase sempre mostraria 100% porque o ato de relatar o uso em si (sem alguns sleep atrasos) usa toda a CPU.

DocSalvager
fonte
Doc, obrigado pelo pensamento, mas esse não era o problema
Jonas