Talvez você queira diminuir o timeout padrão:<div>sub PING_TIMEOUT () { 5 }</div><div>(No seu script era 1 segundo se não me engano)</div><div><br></div><div>No POE::Component::Client::Ping-&gt;spawn, talvez você queira passar a opção Parallelism, ex:</div>
<div><div>POE::Component::Client::Ping-&gt;spawn(</div><div>  Alias   =&gt; &#39;pinger&#39;,        # The component&#39;s name will be &quot;pinger&quot;.</div><div>  Timeout =&gt; PING_TIMEOUT,    # The default ping timeout.</div>
<div>  Parallelism =&gt; 128</div><div>);</div></div><div><br><div class="gmail_quote">2010/7/12 João André Simioni <span dir="ltr">&lt;<a href="mailto:jasimioni@gmail.com">jasimioni@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thiago,<br>
<br>
dando uma bem de vagabundo, não li nada  do POE, só modifiquei o<br>
código abaixo para pingar todos os meus Hosts.<br>
<br>
Mas ele está fazendo poucos processos paralelos. O tempo total de<br>
testes está 11 minutos com o POE, e o load nem faz cócegas. Sabem<br>
fácil como mexer nisso?<br>
<br>
Obrigado<br>
<div><div></div><div class="h5"><br>
2010/7/12 Thiago Glauco Sanchez &lt;<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>&gt;:<br>
&gt; Puxa... eu sou muito &quot;toupeira&quot;... já tem código de exemplo para isso feito<br>
&gt; e muito mais pratico e completo que o meu...:<br>
&gt;<br>
&gt; <a href="http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts" target="_blank">http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts</a><br>
&gt;<br>
&gt; Em 12/07/2010 15:52, Thiago Glauco Sanchez escreveu:<br>
&gt;&gt;<br>
&gt;&gt; Um pequeno exemplo que eu criei apenas para ilustrar... o pessoal que<br>
&gt;&gt; desejar incrementar, por favor, be my guest.<br>
&gt;&gt;<br>
&gt;&gt; use 5.12.0;<br>
&gt;&gt;  use POE;<br>
&gt;&gt;  use Net::Ping;<br>
&gt;&gt;    POE::Session-&gt;create(<br>
&gt;&gt;        inline_states =&gt; {<br>
&gt;&gt;        _start  =&gt; sub {<br>
&gt;&gt;            my ($kernel) = $_[KERNEL];<br>
&gt;&gt;            print &quot;Setting up a session\n&quot;;<br>
&gt;&gt;            $kernel-&gt;yield(&quot;ping&quot;);<br>
&gt;&gt;        },<br>
&gt;&gt;<br>
&gt;&gt;        ping =&gt; sub{my ($kernel) = $_[KERNEL];<br>
&gt;&gt;            my @ping = `ping -n 1 <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a>`;<br>
&gt;&gt;            map{say &quot;ping externo ok&quot; if $_ =~ /Perdidos = 0/ } @ping;<br>
&gt;&gt;            $kernel-&gt;delay_set(&quot;net_ping&quot; =&gt; 3);<br>
&gt;&gt;<br>
&gt;&gt;        },<br>
&gt;&gt;<br>
&gt;&gt;        net_ping =&gt; sub{ my ($kernel) = $_[KERNEL];<br>
&gt;&gt;                    my $p = Net::Ping-&gt;new();<br>
&gt;&gt;                    $p-&gt;port_number(80);<br>
&gt;&gt;                    my ($ret, $duration, $ip) = $p-&gt;ping(&#39;<a href="http://ticursos.net" target="_blank">ticursos.net</a>&#39;);<br>
&gt;&gt;                    say &quot;net::ping ok&quot; if $ret;<br>
&gt;&gt;                    $p-&gt;close();<br>
&gt;&gt;                    $kernel-&gt;delay_set(&quot;ping&quot; =&gt; 3)<br>
&gt;&gt;                },<br>
&gt;&gt;        },<br>
&gt;&gt;    );<br>
&gt;&gt;<br>
&gt;&gt;    say &quot;Iniciando o Kernel...&quot;;<br>
&gt;&gt;    $poe_kernel-&gt;run(  );<br>
&gt;&gt;    exit(0);<br>
&gt;&gt;<br>
&gt;&gt;    sub start {<br>
&gt;&gt;        my ($kernel) = $_[KERNEL];<br>
&gt;&gt;       say &quot;Iniciando os testes com POE&quot;;<br>
&gt;&gt;        $kernel-&gt;yield(&quot;ping&quot;);<br>
&gt;&gt;    }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Em 12/07/2010 15:38, João André Simioni escreveu:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; O pessoal comentou - eu vou dar uma olhada nele com atenção.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Obrigado pela dica.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2010/7/12 Thiago Glauco Sanchez&lt;<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>&gt;:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; O Perl tem um framework para aplicações em rede e Multitarefa chamada<br>
&gt;&gt;&gt;&gt; POE<br>
&gt;&gt;&gt;&gt; que<br>
&gt;&gt;&gt;&gt; &quot;Provide a cooperative scheduling and multitasking environment rivalling<br>
&gt;&gt;&gt;&gt; threads and IPC&quot;<br>
&gt;&gt;&gt;&gt; Não seria o caso de estudarmos a possibilidade de usar esse framework no<br>
&gt;&gt;&gt;&gt; seu<br>
&gt;&gt;&gt;&gt; sistema???<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Em 11/07/2010 23:57, João André Simioni escreveu:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Foi um typo - erro de digitação - o Net::Ping testa TCP e UDP. O ping<br>
&gt;&gt;&gt;&gt;&gt; externo ICMP.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Mas assim, eu preciso resolver o problema com esse teste em Perl -<br>
&gt;&gt;&gt;&gt;&gt; como eu disse, essa parte do código é só um pedaço de um sistema<br>
&gt;&gt;&gt;&gt;&gt; maior. SNMP já é usado para várias outras coisas, mas dependem de<br>
&gt;&gt;&gt;&gt;&gt; access lists em routers e eu não tenho como liberar.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; []&#39;s<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; 2010/7/11 Thiago Glauco Sanchez&lt;<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>&gt;:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; O que eu quero dizer: você testou com o ping externo que é um teste<br>
&gt;&gt;&gt;&gt;&gt;&gt; icmp...<br>
&gt;&gt;&gt;&gt;&gt;&gt; depois fez outro teste icmp com o Net::Ping...<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Não seria mais interessante testar de outra forma?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;    $p = Net::Ping-&gt;new(&quot;tcp&quot;, 2);<br>
&gt;&gt;&gt;&gt;&gt;&gt;    $p-&gt;port_number(getservbyname(&quot;http&quot;, &quot;tcp&quot;));<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Mais umas coisas: Suas máquinas/equipamentos em teste estão via<br>
&gt;&gt;&gt;&gt;&gt;&gt; internet<br>
&gt;&gt;&gt;&gt;&gt;&gt; ou<br>
&gt;&gt;&gt;&gt;&gt;&gt; rede local?<br>
&gt;&gt;&gt;&gt;&gt;&gt; Já pensou em usar SNMP? Já tive um problema parecido e iria utilizar<br>
&gt;&gt;&gt;&gt;&gt;&gt; um<br>
&gt;&gt;&gt;&gt;&gt;&gt; processo para cada equipamento por desempenho e acabai optando por<br>
&gt;&gt;&gt;&gt;&gt;&gt; utilizar<br>
&gt;&gt;&gt;&gt;&gt;&gt; o Net:SNMP<br>
&gt;&gt;&gt;&gt;&gt;&gt; que permite utilizar uma função de callback em vez de utilizar um<br>
&gt;&gt;&gt;&gt;&gt;&gt; processo<br>
&gt;&gt;&gt;&gt;&gt;&gt; para cada equipamento. Eu mando uma requisição para todos os<br>
&gt;&gt;&gt;&gt;&gt;&gt; equipamentos<br>
&gt;&gt;&gt;&gt;&gt;&gt; e<br>
&gt;&gt;&gt;&gt;&gt;&gt; conforme eles respondem<br>
&gt;&gt;&gt;&gt;&gt;&gt; a função de call-back trata a requisição.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Porém, não conheço o seu ambiente. Apenas acho que criar 4000 threads<br>
&gt;&gt;&gt;&gt;&gt;&gt; não<br>
&gt;&gt;&gt;&gt;&gt;&gt; seja a melhor solução.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Em 11/07/2010 23:18, João André Simioni escreveu:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; É typo - já está certo no código. ICMP vai via comando externo, UDP e<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; TCP via Net::Ping.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Com relação aos testes, é normal um momento de sobrecarga causar a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; não<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; resposta de testes - essas sobrecargas não devem duram mais que 5<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; segundos. Por isso o sleep - assim eu faço o mesmo teste 3x, com<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; intervalos de 3 segundos.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; []&#39;s<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Sun, Jul 11, 2010 at 10:31 PM, Blabos de Blebe&lt;<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;  wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Não seria um typo?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; icmp -&gt;      ping;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; tcp e udp -&gt;      Net::Ping<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Sun, Jul 11, 2010 at 6:42 PM, Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>&gt;      wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Sim sim, entendi sua preocupação.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Mas em vez de:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; for (1..3) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;           my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; não seria melhor já mandar pingar as 3 vezes no comando ou apenas<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Você<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; está gerando 3 processos externos sem necessidade real.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; outra... o comando ping já não é icmp?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $p = Net::Ping-&gt;new(&#39;icmp&#39;)???<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Em 11/07/2010 17:04, João André Simioni escreveu:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Eu quero fazer o ping de 3 formas - UDP Echo / TCP Echo e ICMP<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Echo.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Alguns clientes tem filtros e assim eu evito falsos positivos.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Net::Ping mesmo com root tem resultados incoerentes quando uso<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ICMP e<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Threads.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; []&#39;s<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Sun, Jul 11, 2010 at 4:56 PM, Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>&gt;        wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Endosso a solução do Lorn. Use o POE.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; E cara... pra que isso??<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; sub checkIp {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;    my $ip = shift;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;    my $pingOk = 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;    eval {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        for (1..3) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            if (grep { / 0% packet loss/ } $ping) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            if ($pingOk == 0) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                my $p = Net::Ping-&gt;new(&#39;icmp&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                $p-&gt;service_check(1);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                if ($p-&gt;ping($ip, 1)) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                    $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                    return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            if ($pingOk == 0) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                my $p = Net::Ping-&gt;new(&#39;udp&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                $p-&gt;service_check(1);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                if ($p-&gt;ping($ip, 1)) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                    $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                    return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;            sleep 3;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;    };<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Para pingar com ping externo, depois com o Net::Ping via icmp e<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; depois<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; com<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; net::Ping udp? Ah... se não me engano, Net::Ping precisa de<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; permissão<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; root<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; para retornar um icmp de forma correta...<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Em 09/07/2010 17:48, João André Simioni escreveu:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Caros,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; tenho um script para testar cerca de 4700 equipamentos, usando<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ping.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Queria usar cerca 250 threads para isso, então o que eu fiz foi<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; quebrar o grupo de 4300 em grupos 18 elementos e abri uma thread<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; para<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; cada.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Não há nenhum problema com o código, o que acontece é que o<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; tempo<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; de<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; abertura das threads é muito alto. E quanto mais threads eu<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; abro,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; maior o tempo para abertura das próximas. As primeiras abrem em<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 30ms,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; mas perto da thread 70 esse tempo já vai para quase 1 segundo.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Vocês sabem como otimizar esse tempo de abertura? Ou alguma<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; outra<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; solução?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Segue o output do script como exemplo:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Para 4677 cpes, e 250 threads, tenho no final 246 grupos, com 19<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; elementos<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; cada<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.61858<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 1 (1) - took 0.030138 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.92080<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 2 (2) - took 0.042668 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.134968<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 3 (3) - took 0.064245 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.199430<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 4 (4) - took 0.082642 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.282278<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 5 (5) - took 0.128257 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.410769<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 6 (6) - took 0.136458 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.547383<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 7 (7) - took 0.208085 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.755594<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 8 (8) - took 0.173014 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:50 2010.928756<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 9 (9) - took 0.132713 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:51 2010.61608<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 10 (10) - took 0.127795 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Trying to create thread in Fri Jul  9 17:46:51 2010.189536<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Created thread 11 (11) - took 0.301836 seconds to create<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Obrigado<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; João André Simioni<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; #!/usr/bin/perl<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; use strict;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; use DBI;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; use Net::Ping;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; use Time::HiRes qw/usleep tv_interval gettimeofday/;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; use threads (&#39;yield&#39;, &#39;stack_size&#39; =&gt;          32*4096, &#39;exit&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; =&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &#39;threads_only&#39;, &#39;stringify&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $host = &#39;192.168.160.179&#39;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $sid  = &#39;HOMOLOG&#39;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $user = &#39;mac_user&#39;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $pass = &#39;mac_user&#39;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $dbh = DBI-&gt;connect(&quot;dbi:Oracle:host=$host;sid=$sid&quot;, $user,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $pass,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; { AutoCommit =&gt;          1 });<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $sth = $dbh-&gt;prepare(&#39;SELECT CPE_ID, CLIENTE_ID, CPE_DESC,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; CPE_IP_WAN, CPE_NODE, CPE_IF FROM MAC_CPE WHERE CPE_PING = ? AND<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; CPE_ATIVO = ?&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $sth-&gt;execute(&#39;1&#39;, &#39;A&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my @cpes;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; while (my (@row) = $sth-&gt;fetchrow_array) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     push @cpes, [ @row ];<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $dbh-&gt;disconnect();<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $maxThreads = 250;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $total      = @cpes;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $cpePerThread = int($total / $maxThreads);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my @toMonitor;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $i = 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $c = 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; foreach my $cpe (@cpes) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     push @{$toMonitor[$i]}, $cpe;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     $c++;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     if ($c&gt;          $cpePerThread) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         $i++;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         $c = 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; print &quot;Para $total cpes, e $maxThreads threads, tenho no final<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $i<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; grupos, com &quot;, scalar @{$toMonitor[0]}, &quot; elementos cada\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; sub processResult {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $r = shift;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     if (ref $r ne &#39;ARRAY&#39;) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         print STDERR &quot;Erro na thread\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         return 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my ($result, $host, $ifs) = @$r;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; sub testeClient {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $threadNum = shift;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $cpeGroup  = shift;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     foreach my $cpe (@{$cpeGroup}) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         my ($cpeId, $clientId, $cpeDesc, $cpeIp, $cpeNode,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $cpeIf)<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; =<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; @$cpe;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         my $pingOk =&amp;checkIp($cpeIp);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         my $status = $pingOk ? &#39;RESPONDE&#39; : &#39;MORTO&#39;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         # print join(&quot;, &quot;, $threadNum, $cpeId, $clientId,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $cpeDesc,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $cpeIp, $cpeNode, $cpeIf, $status), &quot;\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     # print &quot;Finishing thread $threadNum\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     return([1, 0]);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; my $threadCount = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; foreach my $cpeGroup (@toMonitor) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     print &quot;Trying to create thread&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $t0 = [gettimeofday];<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     print &quot; in &quot;, scalar localtime $t0-&gt;[0], &quot;.&quot;, $t0-&gt;[1],<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &quot;\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $thr = threads-&gt;create({scalar =&gt;          &#39;1&#39;},<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &#39;testeClient&#39;,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $threadCount, $cpeGroup);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $elapsed = tv_interval ( $t0, [gettimeofday]);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     print &quot;Created thread $thr ($threadCount) - took $elapsed<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; seconds<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to create\n&quot;;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     $threadCount++;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     while (threads-&gt;list()&gt;= $maxThreads) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         my @joinable = threads-&gt;list(threads::joinable);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         for (@joinable) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             my $r = $_-&gt;join();<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &amp;processResult($r);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         usleep(10000);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $elapsed = tv_interval ( $t0, [gettimeofday]);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; while (threads-&gt;list()) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my @joinable = threads-&gt;list(threads::joinable);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     for (@joinable) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         my $r = $_-&gt;join();<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &amp;processResult($r);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     usleep(10000);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; sub checkIp {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $ip = shift;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     my $pingOk = 0;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     eval {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         for (1..3) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             if (grep { / 0% packet loss/ } $ping) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             if ($pingOk == 0) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 my $p = Net::Ping-&gt;new(&#39;icmp&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 $p-&gt;service_check(1);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 if ($p-&gt;ping($ip, 1)) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                     $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                     return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             if ($pingOk == 0) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 my $p = Net::Ping-&gt;new(&#39;udp&#39;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 $p-&gt;service_check(1);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 if ($p-&gt;ping($ip, 1)) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                     $pingOk = 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                     return 1;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;             sleep 3;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     };<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     return $pingOk;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; What is the sound of Perl? Is it not the sound of a wall that<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; people<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; have<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; stopped banging their heads against?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; —Larry Wall<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Intrutor Perl e Redes<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; What is the sound of Perl? Is it not the sound of a wall that<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; people<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; have<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; stopped banging their heads against?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; —Larry Wall<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Intrutor Perl e Redes<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt;&gt;&gt; What is the sound of Perl? Is it not the sound of a wall that people<br>
&gt;&gt;&gt;&gt;&gt;&gt; have<br>
&gt;&gt;&gt;&gt;&gt;&gt; stopped banging their heads against?<br>
&gt;&gt;&gt;&gt;&gt;&gt; —Larry Wall<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt;&gt;&gt; Intrutor Perl e Redes<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt; What is the sound of Perl? Is it not the sound of a wall that people<br>
&gt;&gt;&gt;&gt; have<br>
&gt;&gt;&gt;&gt; stopped banging their heads against?<br>
&gt;&gt;&gt;&gt; —Larry Wall<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thiago Glauco Sanchez<br>
&gt;&gt;&gt;&gt; Intrutor Perl e Redes<br>
&gt;&gt;&gt;&gt; <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Rio-pm mailing list<br>
&gt;&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; What is the sound of Perl? Is it not the sound of a wall that people have<br>
&gt; stopped banging their heads against?<br>
&gt; —Larry Wall<br>
&gt;<br>
&gt; Thiago Glauco Sanchez<br>
&gt; Intrutor Perl e Redes<br>
&gt; <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Rio-pm mailing list<br>
&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;<br>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Bruno C. Buss<br><a href="http://brunobuss.wordpress.com/">http://brunobuss.wordpress.com/</a><br><a href="http://www.dcc.ufrj.br/~brunobuss/">http://www.dcc.ufrj.br/~brunobuss/</a><br>

</div>