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