Instalei o Ubuntu 14.10 em um servidor. A tarefa principal do servidor é executar uma instalação do MongoDB junto com vários aplicativos NodeJS. Os aplicativos NodeJS serão executados continuamente e aceitarão solicitações externas.
De vez em quando, grandes solicitações chegam, fazendo com que algum aplicativo NodeJS use muita RAM por um curto período de tempo. Tenho tentado monitorar isso, mas não tenho certeza do que fazer com minhas descobertas.
Até agora usei dois comandos para obter insights sobre o uso de RAM. Estes são
free -m
e
sudo htop
O primeiro mostra isso:
total used free shared buffers cached
Mem: 3442 3158 283 6 111 1203
-/+ buffers/cache: 1842 1599
Swap: 0 0 0
Quando olho para isso, diria que cerca de 280 MB de RAM estão livres. O que não parece muito.
htop me diz o seguinte:
1 [||| 0.8%] Tasks: 61, 129 thr; 2 running
2 [||| 1.0%] Load average: 1.16 1.15 0.93
Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB] Uptime: 29 days, 00:23:31
Swp[ 0/0MB]
Eu realmente não sei como ler isso. Alguém pode me ajudar aqui?
Acho que minha pergunta no final se resume a isto:
- Como posso obter informações sobre a quantidade de RAM disponível?
- Quando a memória RAM é muito pouca? 300MB é considerado muito pouco? Perigosamente?
Responder1
DR: você não precisa se preocupar, desde que a -/+ buffers/cache
linha mostre memória livre suficiente. Se mostrar pouca memória livre e você estiver sendo continuamente swap
transferido para o disco, você precisa se preocupar.
Explicação:
Você está bem com seu cenário atual de uso de RAM. Vamos pegar a saída de free -m
para decompô-lo:
Todas as colunas free -m
são autoexplicativas. O importante é observar que você não precisa se alarmar quando o uso de memória estiver alto sem ver a quantidade de memória armazenada em cache e buffer.
A partir da saída, você usou 3.158 MB de seus 3.442 MB de RAM, uma subtração simples diria que você tem apenas 283 MB livres para serem alocados para novos programas. Isso não está certo, você precisa olhar as colunas cached
e também, mostrará a quantidade de dados do disco armazenados em cache pela RAM para acesso mais rápido aos arquivos comumente usados e mostrará a quantidade de dados a serem gravados no disco.buffers
cached
buffered
Como você sabe, o acesso ao disco é muito mais lento que a RAM, portanto, para melhorar o desempenho, é bom armazenar alguns dados do disco na RAM. Você tem 1.203 MB de dados em cache e 111 MB de dados em buffer. É bom que sua memória armazene essa quantidade em cache sem apenas manter essa quantidade de RAM ociosa. Isso melhorará muito o seu desempenho.
Para obter a quantidade real de RAM que está sendo usada sem armazenamento em cache/buffer, observe a -/+ buffers/cache:
linha. Este resultado é mostrado subtraindo a quantidade armazenada em cache/buffer. Como você pode ver, você tem 1599 MB livres, então tudo parece OK neste estado. Se você perceber que os valores nesta linha estão baixos, você precisa se preocupar e dar uma olhada no uso de RAM.
Observe também que, quando um novo programa for iniciado e não houver memória suficiente após o armazenamento em cache, os caches mais antigos serão limpos automaticamente para liberar espaço para o novo programa. Portanto, desde que o uso real da memória não seja alto e você esteja sendo continuamente trocado para o disco, é bom ter uma quantidade substancial em cache, pois está "usando" sua memória com eficiência.
Responder2
heemayl já cobriu boa parte das informações sobre a memória real disponível. Minha postagem aqui é apenas um oneliner que você pode adicionar ao seu .bashrc
alias para usar como uma visão geral rápida do uso real:
free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
E exemplo de saída:
$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
Used 1.2G Out of 5.6G
Se você estiver interessado em uma investigação mais aprofundada da memória, use cat /proc/meminfo
, que lista muitas informações, eeste blogirá ajudá-lo a entender como free
o comando calcula as coisas desse arquivo.