[FUG-BR] RES: RES: Script perl consome muito CPU

2010-08-17 Por tôpico Fernando Buzon Macedo
Eu fiz assim:
--
next LOG unless defined $message;
if (!$message)
{
  sleep(1);
}
else
{
  chomp $message;
  chop $message;
  $message = substr $message,1;
  my($dt,$id,$ip,$url,$what,$how,$size,$a,$why,$c,$d,$type,$f,$filter)=split
/,/,$message;
  $sth-execute($dt,$id,$ip,$url,$what,$how,$size,$why,$type,$filter);
}
---

O script continua funcionando, só que não mudou nada no processamento não.
Eu imaginava que ele não ficaria em um loop infinito, mas que ele só faria o
insert quando houvesse um file input, esse que seria o chic da coisa, se for
pra ficar em loop infinito não tem graça, ai eu faço em shell! rs

Vou dar uma estudada melhor nesse script, de qualquer forma muito obrigado
pela dica e se vc tiver mais alguma idéia e quiser mandar eu te agradeço.

Valeu.
Fernando


-Mensagem original-
De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em nome
de Fernando Buzon Macedo
Enviada em: terça-feira, 17 de agosto de 2010 10:45
Para: 'Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)'
Assunto: [FUG-BR] RES: Script perl consome muito CPU

Obrigado.
Eu acho que entendi sua idéia, vou ver em Perl e vou fazer, mas seria tipo:

next LOG unless defined $message;
if (!$message)
  sleep 1
else
{
//Resto do código
}

Seria isso né?
Valeu, se conseguir algo posto aqui.

-Mensagem original-
De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em nome
de Rafael Henrique Faria
Enviada em: terça-feira, 17 de agosto de 2010 10:27
Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
Assunto: Re: [FUG-BR] Script perl consome muito CPU

2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br


 LOG: while (1) {


Bom dia Fernando.
O problema, é esse while (1)

O código do script é realmente compacto, ele não realiza processamento.
Então, ele não deveria, e não poderia consumir CPU.
Porém, como ele está em um loop infinito, ele acaba consumindo CPU.

O que você pode fazer, é melhorar esse script, com outras formas de obter os
dados. Eu não conheço PERL, por isso não posso ajudar muito, mas posso dar
uma sugestão:

   next LOG unless defined $message;

Nessa parte do código, em vez de já pular para o loop novamente quando não
existir nenhum dado a ser processado, poderia ser dada uma pausa... de 1
segundo por exemplo. Iria diminuir drasticamente o processamento.


-- 
Rafael Henrique da Silva Faria
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


[FUG-BR] RES: RES: Script perl consome muito CPU

2010-08-17 Por tôpico Fernando Buzon Macedo
Como disse, peguei esse script já pronto no site do dansguardian.
De programação eu conheço muito pouco.

Zhu Sha Zang, sem querer ser folgado, mas você não teria uma opção simples
pra ficar no lugar de while (1) aí?

De qualquer forma obrigado, vou pesquisar sobre pooling Perl.
Valeu.


-Mensagem original-
De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em nome
de Zhu Sha Zang
Enviada em: terça-feira, 17 de agosto de 2010 11:28
Para: freebsd@fug.com.br
Assunto: Re: [FUG-BR] RES: Script perl consome muito CPU

 Em 17-08-2010 11:21, Rafael Henrique Faria escreveu:
 2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br

 Obrigado.
 Eu acho que entendi sua idéia, vou ver em Perl e vou fazer, mas seria
tipo:

 next LOG unless defined $message;
 if (!$message)
  sleep 1
 else
 {
 //Resto do código
 }


 Você colocou o sleep depois do retorno do loop. O comando que faz o 
 look é o next LOG.

 Eu tentaria algo do tipo:

 LOG: sleep 1; while (1) {
my $message = FIFO;
next LOG unless defined $message;

  Seria isso né?
 Valeu, se conseguir algo posto aqui.

 -Mensagem original-
 De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em 
 nome de Rafael Henrique Faria Enviada em: terça-feira, 17 de agosto 
 de 2010 10:27
 Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
 Assunto: Re: [FUG-BR] Script perl consome muito CPU

 2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br

 LOG: while (1) {


 Bom dia Fernando.
 O problema, é esse while (1)

 O código do script é realmente compacto, ele não realiza processamento.
 Então, ele não deveria, e não poderia consumir CPU.
 Porém, como ele está em um loop infinito, ele acaba consumindo CPU.

 O que você pode fazer, é melhorar esse script, com outras formas de 
 obter os dados. Eu não conheço PERL, por isso não posso ajudar muito, 
 mas posso dar uma sugestão:

   next LOG unless defined $message;

 Nessa parte do código, em vez de já pular para o loop novamente 
 quando não existir nenhum dado a ser processado, poderia ser dada uma 
 pausa... de 1 segundo por exemplo. Iria diminuir drasticamente o
processamento.


 --
 Rafael Henrique da Silva Faria
 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Sugiro pesquisar por técnicas de pooling em perl. Esse while (1) é
absurdo.

Att


-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: RES: Script perl consome muito CPU

2010-08-17 Por tôpico Leonardo Augusto
Mas qual o proposito desse script ?

Pegar o que vai sendo gravado no var/log/dansguardian/access.log e
inserir no mysql ??

Se for isso, o problema é que vc fica num loop e lendo o arquivo

Pq nao faz o seguinte, usa o crontab, pra executar esse script a cada
minuto, aí o script
le o log, registra o numero de bytes lidos para dar um fseek na
proxima leitura... e grava no mysql..
Vai entrar, ler, gravar e sair...

Qualquer coisa que vc faca que fique num loop lendo um arquivo do
filesystem vai ficar com alto nivel de consumo
de cpu, pois nao tem um evento do SO onfilechange eheh pra chamar
teu perl. Se voce quer um processo que faca isso
acho que tens que usar threads ou de C ou java para que nao consuma
tanta cpu, um processo com while + sleep consome.

Acho que é isso

2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br:
 Como disse, peguei esse script já pronto no site do dansguardian.
 De programação eu conheço muito pouco.

 Zhu Sha Zang, sem querer ser folgado, mas você não teria uma opção simples
 pra ficar no lugar de while (1) aí?

 De qualquer forma obrigado, vou pesquisar sobre pooling Perl.
 Valeu.


 -Mensagem original-
 De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em nome
 de Zhu Sha Zang
 Enviada em: terça-feira, 17 de agosto de 2010 11:28
 Para: freebsd@fug.com.br
 Assunto: Re: [FUG-BR] RES: Script perl consome muito CPU

  Em 17-08-2010 11:21, Rafael Henrique Faria escreveu:
 2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br

 Obrigado.
 Eu acho que entendi sua idéia, vou ver em Perl e vou fazer, mas seria
 tipo:

 next LOG unless defined $message;
 if (!$message)
  sleep 1
 else
 {
 //Resto do código
 }


 Você colocou o sleep depois do retorno do loop. O comando que faz o
 look é o next LOG.

 Eu tentaria algo do tipo:

 LOG: sleep 1; while (1) {
                my $message = FIFO;
                next LOG unless defined $message;

  Seria isso né?
 Valeu, se conseguir algo posto aqui.

 -Mensagem original-
 De: freebsd-boun...@fug.com.br [mailto:freebsd-boun...@fug.com.br] Em
 nome de Rafael Henrique Faria Enviada em: terça-feira, 17 de agosto
 de 2010 10:27
 Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
 Assunto: Re: [FUG-BR] Script perl consome muito CPU

 2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br

 LOG: while (1) {


 Bom dia Fernando.
 O problema, é esse while (1)

 O código do script é realmente compacto, ele não realiza processamento.
 Então, ele não deveria, e não poderia consumir CPU.
 Porém, como ele está em um loop infinito, ele acaba consumindo CPU.

 O que você pode fazer, é melhorar esse script, com outras formas de
 obter os dados. Eu não conheço PERL, por isso não posso ajudar muito,
 mas posso dar uma sugestão:

               next LOG unless defined $message;

 Nessa parte do código, em vez de já pular para o loop novamente
 quando não existir nenhum dado a ser processado, poderia ser dada uma
 pausa... de 1 segundo por exemplo. Iria diminuir drasticamente o
 processamento.


 --
 Rafael Henrique da Silva Faria
 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



 Sugiro pesquisar por técnicas de pooling em perl. Esse while (1) é
 absurdo.

 Att


 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd