Estudo de Caso IV – Parte 1

No Post de hoje, vamos falar sobre monitoramento pontual, mas o que é isso: O monitoramento pontual é a melhor forma de se realizar ajustes finos e detectar gargalos. Vamos aprender a usar algumas ferramentas, mas antes vamos entender melhor os recursos do S.O..

Recursos do S.O.

Os recursos utilizados pelo PostgreSQL são gerenciados pelo sistema operacional. Para se compreender o que está acontecendo com o PostgreSQL, às vezes, é necessário saber se a questão não reside em alguns desses recursos.

Os recursos mais importantes a monitorar são estatísticas dos discos, memória e CPU. Outras estatísticas podem ser importantes em alguns cenários como rede, processos, swap e IPC – Inter-Process Communications.

Para que seja possível um monitoramento eficaz, é muito importante que o administrador conheça os limites de cada um dos itens. Em alguns casos, a métrica de porcentagem já expõe quanto de um recurso está em uso ou ainda está disponível. Em algumas outras medidas, como estatísticas de I/O, os limites terão de ser determinados experimentalmente.

Ferramentas – top

O “top” é uma ferramenta muito popular no mundo Unix/Linux, traz uma visão geral estado do S.O. no momento. Ele apresenta um snapshot de 3 em 3 segundos de várias informações de sistema.

Para que seja possível um monitoramento eficaz, é muito importante que o administrador conheça os limites de cada um dos itens. Em alguns casos, a métrica de porcentagem já expõe quanto de um recurso está em uso ou ainda está disponível. Em algumas outras medidas, como estatísticas de I/O, os limites terão de ser determinados experimentalmente.

No seu cabeçalho o podemos destacar as seguintes informações:

  • Carga média: – A carga média do sistema é resumidamente a média exponencial da soma dos processos na fila de execução que estão aguardando mais os processos em execução no momento. Ela é mostrada no item “load average”no formato de “último minuto:5 min: 15 min”. Um número muito maior que o número de processadores pode representar problemas.
  • Número de processos: É mostrado no item “Tasks“.
  • Número de processos: Uso de CPU: O uso de CPU por aplicações é apresentado na coluna “%us” da linha “CPU”.
  • Espera por IO: Representa a porcentagem de tempo gasto de CPU aguardando por operações IO, números altos indicam que podem estar ocorrendo gargalos de discos. É apresentado na coluna “%wa” da linha “CPU”
  • Uso de swap: É apresentado na coluna “used” da linha “Swap”. Lembrando que o uso de swap deve sempre ser evitado.

Na lista de processos destaca-se as seguintes informações:

  • Uso de memória residente: – Apresentado na coluna “RES”, este valor mostra o quanto de memória física o processo esta efetivamente usando.
  • Uso de memória compartilhada: – Apresentado na coluna “SHR”, este valor mostra a quantidade de memória compartilhada utilizada pelo processo.
  • Porcentagem de uso de CPU: – Apresentado na coluna %CPU.
  • Porcentagem de uso de memória: – Apresentado na coluna %MEM.
    • Ferramentas – free

      O comando free é muito popular em ambientes Unix. Mas ele pode ser mal interpretado para administradores desavisados. Vejamos um exemplo do mesmo:

      vinicius@vale:~$ free -m
      total used free shared buffers cached
      Mem: 5767 1972 3794 0 113 947
      -/+ buffers/cache: 912 4854
      Swap: 5937 0 5937

      A opção -m é usada para mostrar os valores em MB ao invés de bytes (pode-se usar -g para GB também).É importante frisar que a linha que devemos mais prestar atenção para saber o quanto de memória usada e livre o sistema tem é a segunda! Esta linha desconta o uso de buffers e cached memory, e indica o quanto realmente os processos estão consumindo.

      O Linux (e outros Unix) tem a tendência de usar a memória disponível para cache de disco e buffers de rede. A coluna cached da primeira linha indica o quanto de cache de disco o S.O. está alocando, e este cache é usado para evitar I/O de disco em leituras e portanto muito importante para um banco de dados. A existência deste cache é um dos motivos que não há necessidade de se alocar tanto shared buffer o possível no PostgreSQL.

      Ferramentas – ps

      Outra ferramenta muito usada pelos administradores de sistema, mas raramente explorada em sua totalidade é o ps, capaz de mostrar os processos na memória e o consumo de recursos dos mesmos. O ps pode por exemplo ser usado para filtrar somente as informações pertinentes do sistema com a opção o. O exemplo abaixo indica os processos que estão na memória do PostgreSQL somente com o uso de CPU e memória.

      vinicius@vale:~$ ps o ‘pid,s,%cpu,%mem,cmd’ -C postgres
      PID S %CPU %MEM CMD
      1114 S 0.0 0.2 /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/post
      1365 S 0.0 0.0 postgres: checkpointer process
      1366 S 0.0 0.0 postgres: writer process
      1367 S 0.0 0.0 postgres: wal writer process
      1368 S 0.0 0.0 postgres: autovacuum launcher process
      1369 S 0.0 0.0 postgres: archiver process archiving 00000001000000
      1370 S 0.0 0.0 postgres: stats collector process

      Com o ps também é possível saber a quantidade de conexões abertas somente mandando contar suas linhas e descontando os processos fixos.

      vinicius@vale:~$ ps o ‘pid,s,%cpu,%mem,cmd’ -C postgres | wc -l
      8

      No exemplo acima é possível concluir que existe um conexão aberta, pois descontando o número de processos fixos (6) mais o cabeçalho temos o número 1.

      Conclusão

      Neste post de hoje, vimos algumas das ferramentas para monitoramento pontual, no próximo post, falaremos mais sobre outras ferramentas e como usá-las.