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

Fernando Buzon Macedo fernando em bebedouro.sp.gov.br
Terça Agosto 17 14:04:13 BRT 2010


Leonardo, muito obrigado pelas informações.
Eu pensei que essa parada de FIFO do Perl fizesse o papel desse evento
"onfilechange", afinal file input file output, mas então não é o caso
então... rs

Já tinha pensado em fazer eu mesmo, minha dúvida tinha sido sobre essa do
fseek na próxima leitura, como você sugeriu registrar o numero de bytes da
leitura anterior, está certo mesmo...

Foi apenas uma ilusão pelo nome FIFO que me confundiu.
Pensei ter descoberto o "onfilechange", por isso nem pensei em outra opção.

Vou rever meus conceitos.
Muito obrigado a todos da lista, aqui você encontra mesmo! Hehehe

abs

-----Mensagem original-----
De: freebsd-bounces em fug.com.br [mailto:freebsd-bounces em fug.com.br] Em nome
de Leonardo Augusto
Enviada em: terça-feira, 17 de agosto de 2010 13:31
Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
Assunto: Re: [FUG-BR] RES: RES: Script perl consome muito CPU

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 <fernando em 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-bounces em fug.com.br [mailto:freebsd-bounces em fug.com.br] Em nome
> de Zhu Sha Zang
> Enviada em: terça-feira, 17 de agosto de 2010 11:28
> Para: freebsd em 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 <fernando em 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-bounces em fug.com.br [mailto:freebsd-bounces em 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 <fernando em 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



Mais detalhes sobre a lista de discussão freebsd