Pressione enter para ver os resultados ou esc para cancelar.

Upgrade no ambiente de desenvolvimento LINUX: Memória RAM

Neste artigo, que é o terceiro da série de artigos sobre Upgrade no Ambiente de Desenvolvimento LINUX (você pode conferir a primeira parte aqui e a segunda parte aqui)  vou mostrar algumas dicas de como você pode monitorar e gerenciar a Memória RAM da sua máquina!

Pré requisitos:

  • Utilizar linux.
  • Ter vontade de aprender mais sobre shell script e seu sistema operacional.

DISCLAIMER

Faça um upgrade seu ambiente de desenvolvimento LINUX - Memória RAM

Fonte: Wikimedia

Neste post estou ensinando alguns truques rápidos e é importante que você entenda e saiba o que está fazendo em sua máquina antes de apertar o enter. Sinalizei todos os riscos que conheço, mas a máquina é sua e não assumo responsabilidade sob quaisquer danos causados à sua máquina ou dados.

Tenha critério e não tenha muito medo de ser feliz porque é fazendo cagada que se aduba a vida, mas não mande seu adubo pra mim que a terra aqui já está bem fértil xD. Boa sorte! Agora sem mais delongas…

 

Analisando o uso de Memória Ram

A primeira dica é ter uma forma de avaliar o que está acontecendo no seu sistema. Para ambientes Linux você pode utilizar o comando top

Fonte: Produzida pelo autor


E você verá uma tela assim:

Faça um upgrade seu ambiente de desenvolvimento LINUX - Memória RAM

Fonte: Produzida pelo autor

O comando top mostra para você todos os processos que estão rodando em sua máquina neste momento com alguns dados relevantes, como a % de CPU utilizada (%CPU) e % de memória RAM utilizada (%MEM), o nome do comando e do usuário dono do processo.

 

O PID é um número identificador do processo que pode ser usado para obter informações sobre o processo ou trabalhar com comandos. Além disso, no cabeçalho dessa lista você poderá observar dados sobre os recursos da máquina, como a quantidade utilizada e total de processamento, memória, memória swap, dados sobre as tasks do sistema e load average

 

Com esses dados você pode ver qual recurso está menos disponível no seu sistema e quais processos estão consumindo mais deste recurso. No exemplo acima, podemos observar que o gnome-shell está consumindo 7,9% de CPU de um core do meu processador e 1,3% de memória.

 

Também é possível observar outros softwares conhecidos rodando. No caso dos recursos da máquina, a memória ram está com apenas 788 MB livres, o que mostra que estou rodando a máquina próximo do limite.

 

Para não ter problemas com falta de memória, posso fechar alguns processos que não são relevantes, desde que saiba o que eu estou fazendo, é claro. Não feche processos que você não sabe o que eles fazem. E procure fechar os processos utilizando seus próprios comandos de saída, mas caso você não esteja conseguindo fechar o processo da maneira convencional e queira fazer um override e usar sua força Jedi, você pode utilizar o comando kill:

 

Faça um upgrade seu ambiente de desenvolvimento LINUX - Memória RAM

Fonte: Produzida pelo autor


Na parte inferior da tela é possível observar que utilizei o comando
kill e passei um PID do kube-apiserver. Eu particularmente não lembro como faz pra fechar o kubernetes e não tenho nada importante rodando lá, então não há problemas, mas ele está consumindo 1,7% de memória.
 

Também podemos perceber que o comando kill precisa do super usuário (sudo). Um processo que se recusa a fechar mesmo quando você está usando sudo kill, pode ser exterminado com um sudo kill -9 {PID}, USE POR SUA CONTA E RISCO.

 

Warning: Essa é uma maneira simples e imediata, principalmente quando sua máquina está começando a travar e você não pode perder trabalho que não foi salvo ou não versionado. Porém, não é seguro utilizar esse comando toda vez que você quiser fechar um programa, pois cada software faz seu próprio controle antes de fechar, e interromper essas etapas pode causar problemas. Use somente quando necessário e quando souber o que está fazendo!

 

Infelizmente fechar o kube-api não ajudou muito já que 1,7% de memória ram é pouca coisa, e os navegadores acabam consumindo a maior parte.

Fonte

 

Caso você queira um software um pouco mais robusto que o top, também tem o htop.

Fonte: Produzida pelo autor


O htop é muito bacana, pois trás uma visualização mais direta no cabeçalho e permite filtrar, ordenar, enviar o comando
kill diretamente, entre outras coisas, utilizando shortcuts na barra inferior. 

Para instalar ele no linux:

Debian: apt install htop
Fedora: dnf install htop

 

Outros comandos interessantes para conhecer sua máquina:

lscpu – dados sobre processadores.
lspci – dados sobre dispositivos pci no computador.
cat /proc/meminfo – o arquivo virtual meminfo trás informações dinâmicas sobre seu kernel e o sistema.
df -x squashfs – dados sobre uso de disco e mounting points.
sudo fdisk -l  – dados sobre partições e discos.

 

Memória Ram

A memória costuma ser um recurso um pouco mais complicado de se gerenciar, pois o sistema e as aplicações vão sendo utilizadas conforme a necessidade hoje em dia as aplicações web e os navegadores podem consumir muita memória, principalmente se você é, assim como eu, apegado a suas abas:

Fonte: Produzida pelo autor


Auto Tab Discard

Auto Tab Discard é uma extensão para os principais navegadores que permite definir regras para descarte de tabs ociosas. Você pode definir quais tabs não deseja descartar, quanto tempo elas devem aguardar antes de serem descartadas, etc. Isso reduz bastante a memória consumida, pois as tabs no navegador que não estão sendo acessadas continuam rodando códigos, workers, e consumindo espaço de memória, prontas para serem visitadas a qualquer momento.


Quando o Auto Tab Discard descartar alguma tab, ela continuará no navegador, marcada com uma bolinha cinza, e ao tentar acessá-la, o navegador irá chamar o site novamente, sem que você precise digitar a url ou procurar o link.

Existem outras extensões para navegadores que, em teoria, ajudam com a memória ram e performance, mas essa é realmente a única que eu posso recomendar por experiência própria. Faça sua pesquisa, experimente e utilize a seu critério. Lembre-se sempre de que as extensões nos navegadores podem representar vulnerabilidades, então escolha bem antes de sair instalando qualquer coisa em seu navegador!


ClearRam

Mais um “hack” que carrego a anos em meu bashrc.

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


Esse comando irá liberar memória do
PageCache, dentries e inodes. Eu sinceramente não faço ideia do que isso significa, então se você quiser saber melhor: pesquise! Na verdade, o page cache está relacionado a um cache de arquivos do sistema, mas o que você precisa saber é que esse comando não deve ser executado em servidores de produção, na sua máquina, não execute se tiver algum trabalho não salvo/versionado.

Eu coloquei o comando em uma shell function no meu bashrc (se você não sabe o que isso significa, leia os artigos anteriores).

 

Fonte: Produzida pelo autor


O comando acima está ajustado para rodar dentro de uma
shell function pois exige que seja executado pelo super usuário (sudo), por isso tem a sintaxe um pouco diferente, mas se você for rodar direto no terminal pode usar como estava lá no início mesmo.

 

Agora se eu rodar free -h consigo ver quanto tenho de memória disponível, utilizada, em cache, etc.

Se eu rodar a function cleanram, e rodar novamente o free -h, dá pra ver que liberei 600 MB de ram para o sistema utilizar.

 

Fonte: Produzida pelo autor


Docker Deploy

Esse hack aqui eu tive que aprender pra fazer o teste da Taller, pois minha máquina estava com pouca ram e tive que subir uma imagem bem grande. Então, se você é um candidato ou entrou recentemente na Taller e chegou aqui, aproveite a dica!

O docker possui uma ferramenta chamada docker-compose, utilizada para operar vários containers ao mesmo tempo configurados via um arquivo yml. É muito comum utilizarmos essa ferramenta para subir nossos ambientes de desenvolvimento. 

O docker-swarm é um modo de execução do docker que permite subir diversos containers e trabalhar com load balancing, auto-scale, resistência a falhas, etc. Algo que normalmente é mais utilizado em ambientes que precisam de mais robustez, pois recebem mais acessos ou simulam mais acessos (ambientes de stage, hml ou testes de carga por exemplo).

O docker swarm possui uma configuração chamada “deploy”, onde é possível definir a quantidade de recursos limite de cada container, normalmente essa configuração não está disponível para os containers, porém, utilizando uma flag ao subir o docker-compose, é possível utilizá-la mesmo fora do docker swarm.

Fonte: Produzida pelo autor

 

Basta colocar essa configuração:

deploy:
    resources:
           limits:
                    memory: (MEMORIA)

 

Substituindo quanto de memória você quer alocar para o container. (ex: 500 MB, 1G, etc) e quando for subir o docker-compose, utilizar a flag --compatibility

docker-compose –compatibility run

 

Mas use com cautela, pois a limitação excessiva pode causar comportamentos inadequados na sua aplicação e isso pode te trazer mais problemas do que soluções. Nesse caso testei com 100 MB e observei que a aplicação não conseguia nem subir, ao chegar em 300~400 MB às vezes a aplicação apresentava comportamento errático, e com 500 MB não observei nenhum problema. Então deixei setado assim, pois sem esse limite o container estava consumindo quase o dobro.

 

Keep on coding!

Meu objetivo com essa série foi mostrar para você que é possível obter ganhos de produtividade e performance sem precisar investir em uma máquina nova ou equipamentos. 

Que é possível automatizar tarefas repetitivas e rotineiras que consomem boa parte do seu tempo e que como pessoa desenvolvedora, você também pode aplicar seus conhecimentos de programação e linguagem em seu sistema operacional.

Não se acanhe e procure conhecer seu sistema e sua máquina, quanto mais você se aprofundar no seu sistema Linux, mais você poderá extrair dele. Esses conhecimentos são relevantes também, pois você pode transferir para o uso em servidor também, em uma aplicação com acesso bash, por exemplo.

Muitas vezes fica mais fácil e performático fazer algo a nível do sistema operacional do que na linguagem, lembre-se que quanto mais próximo o processamento estiver do dado, menos tempo de transferência de dados e tratamento, logo, via de regra, mais performance. 

No mais, espero que você possa ter aprendido uma coisa ou duas lendo esse texto e se tiver alguma dica, sugestão ou crítica, fique a vontade para nos enviar e compartilhar, estamos sempre aprendendo coisas novas todos os dias e contamos com você para nos ajudar nesse objetivo.

E mais uma citação do Torvalds para o meu “até logo”!

“A filosofia Linux é ‘Rir na cara do perigo’. Ops. Não é bem essa. ‘Faça você mesmo. Sim, agora está certo.” (tradução livre)

 

“The Linux philosophy is ‘Laugh in the face of danger’. Oops. Wrong One. ‘Do it yourself’. Yes, that’s it.” 

– Linus Torvalds

Referências