[Rio-pm] Ajuda com Threads - tempo de abertura
João André Simioni
jasimioni em gmail.com
Segunda Julho 12 18:43:25 PDT 2010
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
>
>
--
Enviado do meu celular
Mais detalhes sobre a lista de discussão Rio-pm