quinta-feira, 27 de outubro de 2011

Descobrindo por onde vaza memória dos seus programas

Estava eu dando um olhada no web site Siebel Unleashed no começo desta semana quando me deparei com o artigo "Memory Leaks in Siebel". O artigo é interessante pois agrega informação espalhada por vários documentos encontrados somente no My Oracle Support. Mas o que mais me chamou a atenção no artigo não foi o que já está documentado por aí.

O autor do artigo (Timur Vafin)  criou uma série de scripts (sendo um deles em Perl) para analisar código eScript recuperado do banco de dados do repositório do Siebel e procurar por variáveis do tipo Object (ou derivados) que de acordo com as boas práticas (de sanidade) deveriam ser eliminadas com um simples var = null dentro do bloco finally de cada programa/função.

Pois bem, eu resolvi botar o programa para rodar e ver o que acontecia. Me desapontei por achar alguns tropeços básicos no que se trata de Perl (nada de pragmas como warnings e strict a a total falta de conhecimento de DBI) mas depois de algumas linhas de código a mais e correções aqui e ali e o script Perl passou a rodar sem problemas no meu ambiente de desenvolvimento sem maiores sustos e com bons resultados!

O script encontrou um monte de tranqueiras no meu repositório... coisa que já faz muito tempo que ninguém olha mas está lá... como uma mina terrestre esperando alguém pisar encima para explodir!

Caso você não saiba, algum componente do seu servidor Siebel pode estar tendo problemas de vazamento de memória e o processo acaba sendo morto pelo sistema operacional para evitar que o servidor fique sem memória RAM. No caso de eScript, fatalmente será algum AOM que estiver rodando no servidor.

Eu fiquei tão contente com o resultado que entrei em contato com o Timur e hoje acabo de criar um projeto para o programa no Google Code. O resultado pode ser visto aqui.

O parser do programa ainda é bem rudimentar (baseado em expressões regulares) e provavelmente pode apresentar falsos positivos mas certamente já é uma mão na roda para começar a desenterrar essas "minas terrestres".

Gostou da ideia também? Estou aceitando contribuidores para o projeto (ei rodar testes também é contribuir!) e mesmo que você só estiver interessado em dar uma olhada no código basta acessar o repositório SVN do Google Code em:

http://code.google.com/p/siebel-code-analyzer/source/browse/#svn%2Ftrunk

Até mais!

Nenhum comentário:

Postar um comentário