[SP-pm] WWW::Scripter - Como tirar o objeto da memória

Andre Carneiro andregarciacarneiro at gmail.com
Fri Apr 16 13:32:27 PDT 2010


Em 16 de abril de 2010 17:08, Luis Motta Campos <luismottacampos at yahoo.co.uk
> escreveu:

> Andre Carneiro wrote:
> > Eu achei isso
> > aqui:*Devel::Size*<
> http://search.cpan.org/%7Etels/Devel-Size-0.71/lib/Devel/Size.pm>
> >
> > Não consigo desalocar com isso, mas consigo monitorar., mas pelo
> > menos dá pra monitorar algumas coisas com isso.
> >
> > Se alguém souber de algum módulo onde eu posso, através da variável
> > onde o objeto está, desalocar 'na marra', me avisem. Quanto a mim vou
> > continuar procurando alguma solução...
> >
>
> André,
>
> Desculpe a demora em responder, meu amigo. O fuso horário não me ajuda a
> acompanhar nada em tempo real, agora...
>
>
Relaxa !!!


> Perguntas simples, para começar:
>
> 1. Eu vi o trecho de código, mas não consigo executar aquilo para
> reproduzir o problema. Será que você pode reduzir o problema ao mínimo
> de código **funcional** que eu possa rodar aqui para reproduzir?
>
>
Humm... vou mandar sim, mas num outro post, quando eu chegar em casa(amanhã
provavelmente), estou de saída agora.

2. Como este módulo é "Pure Perl", eu não acredito na possibilidade de
> ele ser o responsável pelo seu memory leak. Módulos "Pure Perl" estão
> 100% sob o controle do Perl, e se houver um memory leak você deveria
> observar ele em outros lugares também. Eu recomendo que você procure por
> módulos e dependências do seu módulo que não sejam Pure Perl e que
> estejam embaixo da cadeia de chamadas do seu método get(). Isso vai te
> dar uma idéia mais clara de onde está o problema.
>
>
Sinto dizer que é. Eu isolei os 'gets' invocados através do objeto
WWW::Scripter de todos os outros elementos, incluindo objetos
HTML::TreeBuilder::XPath. O Mantovani enviou um código que ele mesmo testou,
inclusive xingando  o módulo, ja que concluiu que o mesmo realmente manda a
memória 'pras cucuia...', e mandou uma discussão em um fórum em alemão, onde
um problema semelhante com o módulo ocorre.


> 3. Eu acho que foi o Nilson que chamou a atenção, mas o
> HTML::TreeBuilder é problemático. Se voce estiver usando ele ou algum
> ooutro HTML parser, eles podem ser os responsáveis pelo seu memory leak.
>
>
Sim, o TreeBuilder é problemático, mas o método 'delete' funciona muito bem,
e resolve a questão. Basta prestar atenção em onde vc o invoca. Já com o
Scripter, eu tentei inclusive fazer coisas feias como limpar o hash na mão
só pra testar... mesmo assim ele continua acumulando alocação de memória,
então é aquilo... tem cheiro de elefante, parece elefante, deve ser
elefante!

Eu dei uma olhada no módulo. Ele usa outras coisinhas que eu não tenho idéia
se podem ou não causar o 'vazamento'. De qualquer forma ainda estou
analisando.


> 4. O pessoal da lista já sugeriu, e eu acho que é um bom work-around
> para agora se você usar fork() e ler os resultados da sua coleta de
> dados de um arquivo temporário (FIle::Temp) ou de um Named Pipe no disco.
>
>  *  *  *
>
>
Na verdade eu já estou usando fork para cada link de categoria do site. Não
sei se vai ser uma boa usar o fork novamente para tentar resolver, mas não
custa tentar.


> Aqui tem minha sugestõa de estratégia: use fork(), IO::Select, e
> IO::Event; dispare processos com open() que escrevam dados de volta para
> o seu programa (logue STDERR à parte).
>
> Monitore os filehandles abertos para saber quem terminou (use IO::Select
> e IO::Event para isso), leia os dados do filehandle quando for apropriado.
>
> Depois de ler os dados do processo-filho de volta no processo principal,
> certifique-se de que você chamou close() no filehandle (o Perl vai
> chamar wait() e esperar que o processo-filho morra. O linux vai reclamar
>  até mesmo a memória que você não pode mais alcançar).
>
> Com isto, você talvez se livre do seu memory leak, e vai certamente
> aumentar a velocidade das suas visitas.
>
>
Quanto a velocidade eu tenho minhas dúvidas, mas vou tentar mesmo assim,
mesmo porque já estou sem idéias.


> Espero que isso ajude.
>
> Boa sorte, e putamplexos!
>




Valeu Champs!  Keep wrecking!


Cheers!



> --
> Luis Motta Campos is a DBA,
> Perl Programmer, foodie and photographer.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
(11)82907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100416/0166ac15/attachment-0001.html>


More information about the SaoPaulo-pm mailing list