Questão Como posso monitorar o uso da memória?


Eu tenho usado top para ver o uso de 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 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 atual da memória em um formato que seja fácil de registrar em um arquivo de texto?


235
2017-10-26 16:50


origem




Respostas:


Eu recomendo combinar as respostas anteriores

watch -n 5 free -m

Note que o Linux gosta de usar qualquer memória extra para blocos de disco rígido de cache. Então você não quer olhar apenas o livre Mem. Você quer olhar para o free coluna do -/+ buffers/cache: linha. Isso mostra quanta memória está disponível para aplicativos. Então eu apenas corri free -m e tenho isso:

             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 tem 2170 MB livre.

Nota: Para parar isso watch ciclo você pode apenas pressionar Ctrl+C.


290
2017-10-26 17:40



Obrigado, isso é informativo. Mas na coluna usada você primeiro tem 2896 e depois 1528 para buffers, isso não significa que você está usando 2896 + 1528? - Jonas
Mem: used é a sua memória usada total. -/+ buffers/cache: used é o seu total de memória usada menos buffers e cache. Eu sei que a saída parece engraçada, mas nenhuma aritmética é necessária aqui. Você está apenas procurando por used / free na linha - / + buffers / cache. - Justin Force
A opção -h é muito melhor - frmdstryr
@frmdstryr Bom ponto! -h / - humano não existia quando eu escrevi isso, no entanto. gitlab.com/procps-ng/procps/commit/… - Justin Force
@ cbradsh1 Você pode apenas fazer free -h, por exemplo. watch -n 5 free -h para obter resultados "legíveis por humanos", por ex. 2.1G ao invés de 2170 na saída. - Justin Force


eu acho que htop é a melhor solução.

  • sudo apt-get install htop

Dessa 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!


192
2018-05-18 00:11



htop é legal porque é mais "gráfico" e possivelmente mais fácil de ler do que free. - mjswensen
Eu não entendo a saída. É RES a memória usada por esse aplicativo em MB? Então o que é SHR? - faizal
@faizal: memória virtual, reservada e compartilhada. - WitchCraft
como é que htop mostrar-lhe o "uso de memória durante um período de tempo"? - dangel
htop -s M_SHARE htop -s TIME - Tomachi


Se você está procurando um bom detalhamento da memória usada por cada processo em execução, recomendo ps_mem.py (encontrado Aqui em pixelbeat.org).

Eu sei nos comentários acima, você mencionou querendo um instantâneo de uma linha de livre, mas eu percebi que outros podem 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 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 esse é o caso.


38
2017-10-26 17:19



Eu me pergunto se a memória é compartilhada entre threads. É compartilhado entre processos, não é? Pelo menos no Windows ... - Thomas Weller
Portanto, neste caso, a memória compartilhada refere-se a páginas que são mapeadas por vários processos na forma de bibliotecas compartilhadas. Além disso, dentro do contexto de um aplicativo multiencadeado, todo o espaço de memória do processo é acessível por todos os encadeamentos nesse processo. - Jason Mock
Agora disponível em PyPI (pip install ps_mem) e no GitHub. - Leif Arne Storset
@ThomasWeller: Sim, os threads sempre compartilham memória, enquanto os processos podem compartilhar alguns ou todos em certas condições. - Leif Arne Storset
para isso eu uso o gnome-system-monitor - jms


Use o livre comando. 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

22
2017-10-26 17:27



Obrigado, parece ótimo. Então, é isso 947 é o uso de memória menos a memória usada para buffers e caches? - Jonas


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


9
2018-01-19 20:09



Obrigado, isso foi ótimo! No entanto, eu preferiria obter o uso da memória em uma única linha, por isso é fácil registrar em um arquivo de texto. - Jonas


Para o monitoramento visual do uso geral da RAM, se você usar Byobu, ele manterá seu uso de memória no canto inferior direito 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 tempo de funcionamento de 1h3m, carga de 0,00, processador de 2.8GHz (virtual) e 994MB (21%) de RAM disponível no sistema.

Byobu in use


4
2018-04-16 19:15





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

enter image description here


3
2017-09-27 13:30



Adicionando o relógio para a frente deste comando torna incrível! como em watch cat /proc/meminfo - Elder Geek
o free comando leva suas informações de /proc/meminfo e apresenta-os de forma compacta. Usar free -h para saída legível por humanos. - LoMaPh


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

free -m | grep "Mem:"

Aqui está um exemplo da saída esperada:

enter image description here


3
2017-10-26 18:01



Isso também permitirá que você veja o uso da memória no momento ... - mook765