Como posso monitorar o uso da memória?

221

Eu usei top para ver o uso da memória no momento. Mas eu gostaria de monitorar o uso de memória durante um período de tempo. Por exemplo, inicie o monitoramento e, em seguida, execute alguns comandos e pare o monitoramento final e veja a quantidade de memória que foi usada durante o período.

Como posso fazer isso no Ubuntu Server?

Eu acho que eu poderia iniciar um cronjob a cada 5 segundos ou mais, e invocar um comando que registra o uso de memória atual em um arquivo de texto. Mas qual comando devo usar para obter o uso de memória atual em um formato que seja fácil de registrar em um arquivo de texto?

    
por Jonas 26.10.2010 / 18:50

10 respostas

272

Eu recomendo combinar as respostas anteriores

watch -n 5 free -m

Observe que o Linux gosta de usar qualquer memória extra para os blocos de discos rígidos do cache . Então você não quer ver apenas o Mem livre. Você deseja examinar a coluna free da linha -/+ buffers/cache: . Isso mostra quanta memória está disponível para aplicativos. Então eu corri free -m e consegui isto:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

Eu sei que estou usando 1528 MB e tenho 2170 MB grátis.

Nota: Para parar este ciclo de watch você pode simplesmente pressionar Ctrl + C .

    
por Justin Force 26.10.2010 / 19:40
188

Acho que htop é a melhor solução.

  • sudo apt-get install htop

Desta forma, você notará quais programas estão usando a maior parte da RAM. e você pode facilmente terminar um, se quiser. Aqui está uma captura de tela!

    
por Alvar 18.05.2012 / 02:11
38

Se você está procurando um bom detalhamento da memória usada por cada processo em execução, recomendamos que você faça o check-out de ps_mem.py (encontrado aqui em pixelbeat.org).

Sei nos comentários acima que você mencionou a necessidade de um snapshot de uma linha de free , mas imaginei que outras pessoas poderiam achar isso útil.

Exemplo de saída:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

A única parte que eu não gosto é o fato de que o script afirma exigir privilégios de root. Ainda não tive oportunidade de ver exatamente por que isso acontece.

    
por Jason Mock 02.10.2015 / 01:47
21

Use o comando free . Por exemplo, esta é a saída de free -m :

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ retornará apenas a segunda linha:

-/+ buffers/cache:        947       1064
    
por Isaiah 26.10.2010 / 19:19
9

O watch pode ser útil. Tente watch -n 5 free para monitorar o uso de memória com atualizações a cada cinco segundos.

    
por mgunes 26.10.2010 / 19:27
4

Para o monitoramento visual do uso geral da RAM, se você usar Byobu , ele manterá o uso da memória no canto inferior direito mão do terminal e será executado enquanto você estiver em qualquer sessão de terminal.

Como você pode ver na captura de tela, minha máquina virtual tem um tempo de atividade de 1h3m, carga de 0,00, processador de 2.8GHz (virtual) e 994MB (21%) de RAM disponível no sistema.

    
por bafromca 19.01.2015 / 21:09
3

Solução e saída de linha única:

free -m | grep "Mem:"

Aqui está um exemplo da saída esperada:

    
por Tim 27.09.2016 / 15:30
2

Você pode fazer isso usando cat /proc/meminfo .

    
por Amir 16.04.2016 / 21:15
1

Eu usaria Cactos . Isto representará graficamente o seu uso de memória, etc., durante um período de tempo, e você poderá verificar o uso usando seu navegador da Web.

    
por Matt 26.10.2010 / 20:01
1

Monitorando o uso da memória

Estou mais de acordo com um dos posts anteriores que mencionou o Cacti como uma ótima maneira de monitorar o uso da memória. No entanto, uma vez que parece cactos não é mais popular no mainstream, existe uma aplicação gráfica alternativa chamada Graphite.

Grafite é relativamente fácil de instalar em um servidor ubuntu e para instalá-lo, você pode confira este link para o fácil de seguir os procedimentos de instalação.

Após a instalação do grafite, agora você pode enviar métricas de memória para ele, em qualquer intervalo que desejar; a cada 5 segundos, a cada minuto, a cada hora ... etc.

Para representar graficamente as métricas de memória, como já sugerido nas postagens anteriores, você pode escrever seu próprio script usando ferramentas do sistema para reunir as informações necessárias sobre a memória. Ou você pode usar um plug-in snmp pré-escrito que fará todo o trabalho para você.

Se você deseja escrever seu próprio script de memória, será prudente garantir que você considere a memória armazenada em cache e armazenada em cache ao calcular a memória usada; caso contrário, você acabará reunindo dados falsos.

Se você preferir utilizar um plug-in snmp que já faz todos os cálculos necessários para você, aqui está um link para um que funciona muito bem: checkMemoryviaSNMP .

Prós de SNMP:

Eu tenho o snmp instalado em todos os nós remotos que monitora. Isso me permite monitorar todos os meus sistemas de um servidor (es) central (is) , sem ter que copiar ou colocar um plugin nos nós remotos.

Contras do SNMP:

Você precisa garantir que o snmp agent esteja instalado em cada um dos nós remotos nos quais deseja monitorar a memória. No entanto, esta instalação será uma negociação única. Se você estiver usando ferramentas de automação como chef ou fantoche ou ferramentas semelhantes em seu ambiente, isso não é problema algum.

Configuração do agente SNMP no (s) nó (s) remoto (s):

Após o agente snmp ter sido instalado, simplesmente vi o arquivo /etc/snmpd/snmpd.conf e adicione esta linha a ele:

rocommunity  (specify-a-community-string-aka-password-here)

Em seguida, reinicie o agente snmpd com:

/etc/init.d/snmpd restart

Em seguida, no seu servidor central, a partir do qual você monitora todos os outros servidores, você pode executar o seguinte comando:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
    
por SimplisticSpeed 22.10.2016 / 17:32