Como aumentar o espaço da partição /dev/shm

A partição /dev/shm utiliza o filesystem tmpfs, sistema de arquivos especial, armazenado 100% na memória RAM.

Essa partição é muito importante para facilitar a troca de informações entre diferentes processos do sistema operacional, e também para deixar alguns processos mais rápidos.

No Debian 9 (e em outras distros também), o padrão é que essa partição seja montada com 50% da memória RAM. No meu caso, tenho uma máquina com 16GB de RAM, então quando eu ligo meu sistema, possuo 8GB nessa partição:


$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 126M 1.5G 8% /run
/dev/sda10 425G 357G 47G 89% /
tmpfs 8.0G 221M 7.8G 3% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 496M 58M 439M 12% /boot/efi
tmpfs 1.6G 28K 1.6G 1% /run/user/118
tmpfs 1.6G 88K 1.6G 1% /run/user/1000

Entretanto, em alguns casos específicos, eu preciso aumentar provisoriamente o tempo dessa partição. Um exemplo é quando eu utilizo alguns scripts de importação de grandes bases de dados, que utilizam mais de 8GB de memória. Esses scripts que eu utilizo rodam um container da imagem mysql:5 utilizando Docker, utilizando o /dev/shm/mysql como volume do container. E eu utilizo esse container provisório para importar o banco, o que em alguns casos fica 10x mais rápido do que importar diretamente no HD convencional.

Neste momento, preciso importar um banco de dados que utiliza até 12GB de RAM no total, então eu preciso fazer o seguinte:

sudo mount -o remount,size=12G tmpfs /dev/shm

Após rodar esse comando, minha partição /dev/shm foi aumentada para 12GB da memória RAM.

Rodando novamente, o comando df -h, agora tenho o seguinte output:

$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 126M 1.5G 8% /run
/dev/sda10 425G 357G 47G 89% /
tmpfs 12G 222M 12G 2% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 496M 58M 439M 12% /boot/efi
tmpfs 1.6G 28K 1.6G 1% /run/user/118
tmpfs 1.6G 84K 1.6G 1% /run/user/1000

Não esqueça de depois de rodar seus scripts, voltar o tamanho /dev/shm para o tamanho original (50% da sua memória RAM), rodando o mesmo comando que utilizou para alterar para 12GB. Caso você esqueça de reduzir o tamanho do /dev/shm, aumenta a probabilidade de sua máquina travar por escassez de memória!

Até a próxima!

Trava otimista e pessimista

A animação abaixo foi gravada com o software asciinema. Recomenda-se assistir em tela cheia.

Todo o conteúdo da apresentação está disponível no repositório https://github.com/rpagliuca/apresentacao-trava-otimista.

Errata: no início da apresentação, o termo CONCORRÊNCIA é incorretamente traduzido como LOCK. Nos trechos seguintes, a tradução correta, TRAVA, é utilizada.

Simulando uma pesquisa de intenção de votos para Presidente do Brasil (Ibope) com Python

* Código-fonte no Github: https://github.com/rpagliuca/simulador-ibope-eleicao

* Na verdade, deveria ter sido utilizado o número de eleitores do Brasil (aproximadamente 150 milhões), e não a população total: https://eleicoes.uol.com.br/2016/noticias/2016/07/25/144-milhoes-de-eleitores-vao-as-urnas-nas-eleicoes-de-2016.htm

* Notícia do G1 que relata que uma amostra de 2506 eleitores foi utilizada na pesquisa de intenção de votos nas eleições para presidente do Brasil de 2014: http://g1.globo.com/politica/eleicoes/2014/noticia/2014/08/dilma-tem-38-aecio-23-e-campos-9-diz-pesquisa-ibope.html

Início do grupo de estudo Fundamentos de Data Science

É com sorriso no rosto que anunciamos a criação do nosso mais novo grupo de estudos:

Com o intuito de iniciar o aprendizado sobre “Fundamentos de Data Science”, estamos criando um grupo de estudo (talks e troca de experiências) para se reunir uma vez por semana após o horário de trabalho. A ideia inicial é discutir sobre assuntos relacionados ao tema, como: Big Data, Engenharia de Software, Machine Learning, Programação em Python, Estatística, Probabilidade e como podemos aplicar “data science” em nosso dia a dia.

Continuar lendo Início do grupo de estudo Fundamentos de Data Science

Leitura de porta serial utilizando Python e Raspberry PI

Hoje vou explicar como fazer a leitura de porta serial utilizando Python e Raspberry PI.

Suponhamos que você trabalhe para um cliente que possui uma balança Toledo 820J/XIV, conectada a um display Toledo 8540, ambos fabricados em abril de 2010.

Você quer monitorar, em tempo real, a balança e publicar o valor medido, continuamente, em um webservice. Como fazer isso?

Continuar lendo Leitura de porta serial utilizando Python e Raspberry PI

Comunicação segura utilizando GPG

Todo time de T.I. deve ter a preocupação com políticas de acessos a senhas, principalmente em se tratando de credenciais de produção.

Algumas estratégias importantes para garantir a segurança dos sistemas de informações são:

  • Rodízio constante de senhas
  • Senhas diferentes para cada usuário

Mas um problema corriqueiramente encontrado é como comunicar essas senhas com segurança entre diferentes pessoas do time.

Uma solução para esse problema de comunicação é utilizar certificados GPG, e integrá-los com clientes de e-mail, por exemplo o Thunderbird.

Continuar lendo Comunicação segura utilizando GPG

Rodando o PHP 7 via Docker

Dica para quem está utilizando Linux com Docker, e não possui PHP 7 configurado na sua máquina.

No meu caso específico, quero apenas rodar alguns testes do PHPUnit em um projeto que clonei do Github, mas não possuo o PHP 7 instalado aqui no meu Debian 8.

Criei um novo arquivo chamado /usr/local/bin/php7 contendo o conteúdo a seguir:

docker run -u `stat -c "%u:%g" .` -ti --rm -v $(pwd):/workspace php sh -c "cd /workspace; php $*"

Marquei esse arquivo com o bit de execução:

Continuar lendo Rodando o PHP 7 via Docker