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!