Artigo
· Maio 21 2min de leitura

Usando %System.Monitor.LineByLine com %SYS.MONLBL para analisar seu código

Tenho certeza de que a maioria de vocês está familiarizada com a utilidade %SYS.MONLBL, que é crucial ao analisar gargalos de desempenho de código. Ela permite que você selecione várias rotinas que deseja monitorar em tempo de execução e também especifique qual(is) processo(s) você quer observar. MAS, e se você não souber exatamente qual processo executaria seu código? Isso é verdade para muitos aplicativos baseados na web (CSP/REST) hoje. Você quer minimizar a utilização de recursos em seu sistema de produção que precisa de análise. Então, que tal fazer uma pequena alteração?

1. Defina um arquivo INC com estas macros:

#define START(%level) try { ##continue 
s zzroutine=$p($view(-1,-3),"^",6) ##continue 
if ##class(%Monitor.System.LineByLine).IsActive(zzroutine)=0 { ##continue $$$ThrowOnError(##class(%Monitor.System.LineByLine).Start($lfs(zzroutine),$lfs(##class(%Monitor.System.LineByLine).GetMetrics(%level)),$lb($job))) ##continue } ##continue 
h 1 ##continue 
} catch (e) { ##continue
 d BACK^%ETN ##continue 
} 

#define PAUSE s sc=##class(%Monitor.System.LineByLine).Pause()

Na sua classe ou rotina, identifique um local que você deseja monitorar e insira estas duas macros para iniciar a coleta de dados e pausar a coleta, como neste exemplo:

$$$START(2)   // use 1 or 2 here

// code of your application here

$$$PAUSE

Sempre que você executar este código (método de uma classe ou rotina), ele tentará iniciar o %SYS.MONLBL para essa classe ou rotina e processo específicos.

Uma vez que seu código tenha terminado, você pode simplesmente ir ao terminal no namespace onde sua aplicação é executada e chamar d ^%SYS.MONLBL. Como a macro START iniciou o monitor, ele ainda estará em execução e você poderá facilmente coletar seus dados de desempenho, opcionalmente junto com o código-fonte. Não se esqueça de parar o monitor depois de coletar seus dados!

Se você precisar coletar dados para mais rotinas, pode facilmente modificar a macro START para permitir a entrada manual de uma lista de rotinas para análise.

Espero que você ache esta pequena alteração útil!

Discussão (0)1
Entre ou crie uma conta para continuar