[Rafael Carício] Profiling de aplicações Django

Hoje tive que identificar um problema complicado no AtéPassar, uma rede social de estudantes de concursos públicos e OAB onde eu trabalho atualmente como líder técnico da equipe de desenvolvimento. A aplicação estava ficando lenta quando tinha muitos acessos simutâneos e não havia motivos aparentes para isso acontecer. Devido a esse problema tive que procurar uma forma de descobrir o que estava acontendo internamente no código da aplicação. Assim, lembrei que existe uma técnica de analise de programas que ecaixa totalmente com esta situação que é o profiling de software.

Pesquisei bastante na internet sobre como fazer isso em aplicações Django. Python tem um módulo especifico para isso, que é o hotshot. Assim acabei encontrando um projeto bem interessante que já existe uma integração com o django para rodar sobre o hotshot. Então ficou mais fácil de realizar essa tarefa de analisar o funcionamento do projeto. E para a visualização das chamadas eu utilizei o KCachegrind, um projeto OpenSource que permite visualizar os dados gerados por softwares de profiling.

Screenshot do KCachegrind

O gráfico gerado pelo KCachegrind mostra as funções do sistema e os caminhos de chamadas com o custo de cada chamada. Assim podemos visualizar e identificar qual o ponto especifico que está deixando o sistema lento.

Depois de utilizar essas ferramentas consegui identificar o problema que estava deixando o AtéPassar lento e agora estamos trabalhando bastante para resolver este gargalo. Acredito que a solução para este problema também irá gera um post interessate para este blog.