[Cascavel-pm] Res: Problema com pipe

Gabriel Sancinetti gabrielssan em yahoo.com
Quinta Fevereiro 18 11:08:28 PST 2010


Alceu,

O comando executado pode ser qualquer script da libexec do Nagios. 
Em 99% dos casos check_nrpe ou check_nt.


Pretendo monitorar hosts atualmente monitorados pelo nagios atráves de um sistema proprietário.
A intenção é integrar o legado com o novo para que não seja necessário "intervir" em hosts de clientes para instalação de um novo serviço de monitoramento.
O novo sistema propriétário possui uma inteface em Perl para geração de eventos. Então executo a linha de comando e manipulo o resultado no script.para gerar ou limpar o evento no novo sistema.

Para aqueles que não conhecem Nagios:  Não existe a possibilidade do comando não retornar resultado pois o comando já tem o próprio timeout.

Quanto ao "ForkManager" foi a minha primeira tentativa sem sucesso. Não me lembro por qual motivo o abandonei, mas com certeza está relacionado à necessidade aguardar a execução de multiplos processos filhos e processar seus resultados assincronamente.
Se é possível, eu não me lembro.

Att.

Gabriel


 



________________________________
De: Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Quinta-feira, 18 de Fevereiro de 2010 16:27:18
Assunto: Re: [Cascavel-pm] Problema com pipe

Olá Gabriel,

Que comando é esse que você chama externamente? Por que algumas vezes você recebe timeout? Simplesmente porque o processo externo que você está executando demora?

Não é possível você substituir esse processo externo por código Perl equivalente? Você evitaria um fork adicional e possivelmente tornaria mais fácil identificar erros.

Já executou um profile do seu programa para identificar quais áreas tomam mais tempo de execução do seu programa? Eu escrevi um artigo sobre isso no perl.org.br.

Dê uma olhada no Parallel::ForkManager (http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm) e veja se ele não te ajuda.

Se o hardware que você não der conta do recado mesmo você tendo otimizado o código, verifique se você não pode usar o OpenMosix para distribuir a carga. Mas só vale a pena se seu processo não realizar muito I/O.

Abraços,
Alceu

> 2010/2/18 Gabriel Sancinetti <gabrielssan em yahoo.com>:
> > Olá,
> >
> > Estou trabalhando com perl há alguns meses e
> recentemente me deparei com um
> > grande desafio.(pelo menos para mim).
> > Não sei se esta lista é a adequada, mas ja gastei 4
> semanas pesquisando no
> > google e nada de solução.
> >
> > Enfim...
> > Preciso reduzir o tempo de execução de um script de
> aproximadamente 50
> > minutos para 8 minutos.
> > 1 - Este scrip faz mais de 2 mil "chamadas externas"
> de sistema operacional
> > ( `comando` ) com timeout de 5 a 10 seguntos.
> > 2 - É necessário processar o STDOUT e EXIT STATUS do
> comando em um processo
> > único não necessáriamente em sequencia.
> >
> > A solução com certeza deve implementar alguma forma
> de paralelismo.
> > Não consegui desenvolver uma forma de utilizar "open"
> no script. Então perdi
> > para uma solução de baixo nível.
> >
> > Encontrei uma solução que quase atendeu minhas
> expectativas, mas estou com
> > problemas de nível de Sistema Operacional nela.
> >
> > Recomendo que deem uma olhada no código pois agora
> irei descrever o problema
> > deste código.
> >
> > O meu problema é a ocorrencia de grande quantidade de
> TIMEOUTs, isto é, o
> > processo pai não recebe/processa as respostas dos
> filhos.
> > Separei as chamadas de sistema em grupos de 80
> comandos.
> > Quando executo o script sem o sleep tanto no processo
> pai quanto no processo
> > filho chego q ter mais de 50% de perda de respostas,
> (TIMEOUT)
> > Conforme adiciono tempo ao sleep no processo filho,
> consigo reduzir a
> > quantidade de TIMEOUTS considerávelmente, mas longe
> do satizfatório.
> > Já quando adiciono o sleep antes do fork do processo
> filho a ocorrencia de
> > TIMEOUTs cai a menos de 0.5%, mas o tempo de
> execução do script se aproxima
> > do original (40 minutos).
> >
> > Acredito que meu problema esteja no processamento do
> sinal (kill), mas
> > também pode ser no pipe. Não acredito que seja no
> pipe pois não ocorre erros
> > no syswrite e no sysread, etc.
> > Já estou quase certo de que terei que refazer tudo de
> outro jeito, mas estou
> > sem idéias e preciso da opinião de pessoas mais
> experientes.
> >
> > Então, agradeço desde já a atenção de vocês e
> espero susgestões para
> > corrigir este script ou para refazer de outro jeito.
> >
> > Cordialmente,
> >
> > Gabriel
> >
> > ps: Ignorem erros de sintaxe e identação pois editei
> o codigo no corpo da
> > mensagem.
> >
> >
> >
> > ________________________________
> > Veja quais são os assuntos do momento no Yahoo! +
> Buscados: Top 10 -
> > Celebridades - Música - Esportes
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> 
> 
> 
> -- 
> "If you’ve never written anything thoughtful, then
> you’ve never had
> any difficult, important, or interesting thoughts. That’s
> the secret:
> people who don’t write, are people who don’t think."
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
> 


      ____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm


      ____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20100218/a85c6b37/attachment-0001.html>


Mais detalhes sobre a lista de discussão Cascavel-pm