Performance e escalabilidade – Profiler AdvPL

Introdução

Qualquer rotina de um sistema, mais cedo ou mais tarde, e por inúmeras razões, pode apresentar em um ou mais instantes, uma perda de desempenho. E, geralmente quando isto acontece, principalmente em rotinas onde uma eventual demora impacta na produtividade ou na operação do cliente, problemas desta natureza saltam para o nível “crítico” muito rápido.

Mesmo lidando apenas com as causas prováveis, existem muitas variáveis envolvidas que atuam direta ou indiretamente nas causas. As mais comuns são: Chamada de um procedimento ou rotina com parâmetros de execução que consideram uma faixa muito grande de dados, quantidade de dados na base para o período de processamento muito acima da média (causas sazonais, picos), processos adicionais que podem ou não pertencer ao sistema levando o ambiente a picos de utilização de recursos ou esgotamento de recursos computacionais, defasagem do “sizing” de máquina devido a aumento de usuários ou módulos adicionais implantados, troca da versão do ERP sem reavaliar o “sizing” das máquinas, até razões ligadas ao desenvolvimento da rotina, como por exemplo um algoritmo projetado sem levar em conta o crescimento da base, e por aí vai.

Identificando as causas

Dada uma determinada situação de perda de desempenho, nomalmente avaliamos se algum dos recursos computacionais do ambiente está perto de seu limite, como utilização de disco, fragmentação de arquivos, consumo de banda de rede, cpu das máquinas de processamento e do banco de dados, além de levantar os detalhes de como a perda de desempenho foi percebida, qual era o tempo médio antes e agora, e se houve alguma alteração no ambiente ( infra, repositórios, binário) entre o cenário antes da lentidão ser percebida e a partir do momento que ela passou a ser reproduzida, além de avaliar se ela ocorre sempre a qualquer momento ou especificamente em momentos de muitos acessos (usuários) na aplicação.

Como eu já havia mencionado, normalmente as causas prováveis envolvem o excesso de consumo de um ou mais recursos, prejudicando o desempenho de algumas rotinas. Quando mais genérico e de uso comum o recurso em questão, mais rotinas ou até mesmo o ambiente inteiro pode ser afetado.

Como os algoritmos normalmente consomem não especificamente um recurso, mas múltiplos recursos simultaneamente, onde a quantidade e os recursos consumidos podem oscilar dentro da mesma aplicação, mesmo que você determine usando uma ferramenta de monitoramento de sistema operacional, que uma das causas da lentidão seja uma fila excessiva de espera por requisições de leitura ou gravação em disco, ainda assim existe a necessidade de se avaliar qual ou quais programas estão contribuindo para que este recurso seja esgotado.

Profiler AdvPL

Neste momento, existe um recurso que se faz muito útil, chamado Profiler (ou Profile) de exexcução de aplicações, que nada mais é do que um registro de log detalhado de quais recursos foram utilizados por um processo, e em qual quantidade, avaliando o prorcesso do início ao final.

Para auxiliar a avaliação de aplicações nestes momentos, ou mesmo para auxiliar o desenvolvedor para avaliar o impacto de alterar uma determinada rotina, foi criado já faz alguns anos o recurso de Profiler AdvPL. Este recurso inicialmente estava disponível no IDE do Protheus, onde a geração do log detalhado de execução era feito apenas para programas iniciados a partir de um processo de depuração. Este recurso também foi incorporado no novo IDE (TDS – Totvs Development Studio), inclusive está documentado no link “Desempenho de Programas (Profile)” — http://tdn.totvs.com/pages/viewpage.action?pageId=24347198

Posteriormente, foi criado uma parametrização de ambiente, para permitir a geração deste log detalhado para jobs, e sem a necessidade de iniciar o processo usando o TDS. Este recurso está documentado no link “LogProfiler – Profiler de execução de programas AdvPL” — http://tdn.totvs.com/pages/viewpage.action?pageId=6065063

Resumo da Ópera

Nos links acima, principalmente no último link, são detalhados não apenas como o recurso é habilitado, mas quais informações são geradas no log, e como elas devem ser interpretadas, inclusive são mencionados os casos mais comuns encontrados em análises de execuções já realizadas e identificadas durante o desenvolvimento e testes dos produtos.

A vantagem destes recursos de Profiler é a possibilidade de serem executados no mesmo ambiente em momentos distintos, onde o log de duas execuções completas que apresentaram diferenças gritantes de desempenho podem ser comparados, tornando mais claro qual ou quais pontos ou funções usadas na aplicação apresentaram diferenças de tempo de resposta. Esta análise, associada a um resultado de monitoramento de recursos do ambiente, pode gerar justamente a rastreabilidade entre as aplicações e os recursos que estão sendo consumidos (e esgotados) do ambiente.

Normalmente, após o código e o ambiente ser analisado, pode-se chegar a algumas conclusões: O algoritmo pode ser melhorado para usar menos recursos para obter o mesmo resultado esperado, ou o algoritmo já está optimizado segundo o paradigma original do processo, e precisa ser refatorado para atender aquela demanda, ou ainda devem ser revisadas e refeitas as distribuições das aplicações no ambiente, e em determinados pontos pode haver a necessidade de acrescentar mais recursos computacionais ( Mais servidores para distribuir a carga, ou escalar verticalmente alguma das máquinas envolvidas que não está dando conta da carga de requisições em questão.

Podem ser necessárias mais de uma ação ao mesmo tempo, dependendo de onde está (ou estão) o(s) gargalo(s) de desempenho da aplicação.

Conclusão

Avaliar um log de Profile de aplicação não é necessariamente complexo, porém o log de execução gerado é muito grande. Neste log, devem ser identificados os pontos realmente significantes, para então decidir onde e como atuar no ambiente ou na aplicação. Uma boa parte da teoria está nos documentos publicados na TDN, com exemplos práticos de análise e tudo mais. O que vai fazer a diferença na sua eficácia de análise é pegar um problema real, e analizá-lo com uma lupa. Quanto mais você meter a mão na massa e avaliar cenários diferentes, mais eficiente será a sua análise. Não têm mágica, você precisa sujar um pouco a mão de graxa e fritar alguns neurônios. Não se acanhe, não é um bicho de sete cabeças … esse aí têm no máximo duas !!!

E, para encerrar 2014, desejo a todos vocês um Feliz Natal atrasado, e um próspero Ano Novo adiantado !!!

Até o próximo post, pessoal 😉

Anúncios

2 comentários sobre “Performance e escalabilidade – Profiler AdvPL

  1. Muito interessante, já havia testado certa vez esse recurso (profiler) mas o tempo escasso não me permitiu mais o uso.
    Fico me perguntando, com relação ao formato de código da maiorias das aplicações desenvolvidas em Advpl, se o problema não está no fato da maioria dos códigos serem altamente acoplados e possuírem muitos recursos repetitivos e não muito produtivos.
    Penso que é interessante para um código, mesmo que estruturado, o uso do MVC e da segmentação para facilitar não só a codificação mas também a análise do desempenho do código e a obtenção da melhoria do mesmo.

    Curtir

    • Olá Fábio,

      As facilidades de codificação usando um Framework são muito interessantes, favorecem reaproveitamento de código e minimizar retrabalho quando utilizamos um nível razoável de abstração. Já a análise de consumo de recursos pode levar em conta mais ou menos instruções, normalmente quanto mais alto o nível da implementação final, mais funções e camadas de nível intermediário e baixo nível são executadas. De qualquer modo, a sua linha de raciocínio e observações são pertinentes 😉

      Abraços

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s