Nós estávamos com uma ocorrência em um cliente em que todas as licenças estavam sendo consumidas e a CPU bastane onerada.
Consultávamos no portal de administração, na lista de processos, mas como o problema era intermitente, não conseguiamos identificar o "vilão".
Fizemos um programa simples, que coleta os processos e algumas informações destes, tais como : IP, executável etc., e gravamos em arquivo .csv.
No portal de administração -> Operação do Sistema -> Gerenciador de Tarefas, cadastramos uma nova tarefa que executa este programa a cada 10 minutos.
Quando o problema voltou a ocorrer, conseguimos verificar essa coleta de informações e vimos um IP e um determinado executável, repetindo em vários processos. Logo matamos a charada.
Segue abaixo o programa a fim de auxiliar os que podem passar pela mesma situação.
QGGETIP ; PEGA IPS DOS PROCESSOS
// Abre o arquivo para escrita
Set file = ##class ( %File ). %New ( "D:\TEMP\logprocips_" _ $zd ( $h ,8)_ "_" _ $tr ( $zt ( $piece ( $h , "," ,2),1), ":" , "_" )_ ".csv" )
Do file.Open ( "NW" ) // "W" para escrita // Escrever cabeçalho no arquivo
Do file . WriteLine ( "PID;ClientIPAddress;ClientNodeName;Exe Name;data e Hora" )
Set Rset = ##class ( %ResultSet ). %New ( "%SYS.ProcessQuery:ListPids" )
Do Rset . Execute ()
While Rset . Next () {
Set pid = Rset . GetData (1)
Set ipAddress = $SYSTEM .Process . ClientIPAddress ( pid )
Set nodeName = $SYSTEM .Process . ClientNodeName ( pid )
Set exeName = $SYSTEM .Process . ClientExecutableName ( pid )
set dth = $zd ( $h ,4)_ " " _ $zt ( $piece ( $h , "," ,2),1)
// Escrever as informações no arquivo
Do file . WriteLine ( pid _ ";" _ ipAddress _ ";" _ nodeName _ ";" _ exeName _ ";" _ dth )
}
// Fechar o arquivo
Do file . Close ()
Write "Exportação concluída com sucesso. Arquivo gerado:" , file.Name ,!
//Márcio Sorvi