Zhu Sha Zang escreveu : "Sugiro pesquisar por técnicas de pooling em perl. Esse "while (1)" é absurdo."
exatamente.. tem que usar algum pooling pra IO(de preferencia assincrona) e uma logica de eventos no estilo publisher/subscriber no freebsd nativamente existe o kqueue.. e no linux o epool.. tem que ver qual o nivel de acesso do perl a isso ai infelizmente(ou felizmente) estou afastado do perl desde 97 por ai.. entao tem que dar uma pesquisada. dependendo do seu servidor web..quem sabe não exista um suport nativo , pra escrever em outras fontes?! se vc tiver escolha de linguagem, e querendo fazer isso em script, sugeriria python ou até mesmo erlang(outra embutida no servidor .. a php), que são menos cripticas e onde vc teria mais suporte.. enfim.. acho que solução pronta pra isso..vai ser meio dificil.. sempre tem que customizar..dai a utilidade de usar uma linguagem de script pra isso 2010/8/17 Fernando Buzon Macedo <ferna...@bebedouro.sp.gov.br> > 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-boun...@fug.com.br [mailto:freebsd-boun...@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 <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 > > ------------------------- > 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