<br><br><div class="gmail_quote">Em 16 de abril de 2010 17:08, Luis Motta Campos <span dir="ltr">&lt;<a href="mailto:luismottacampos@yahoo.co.uk">luismottacampos@yahoo.co.uk</a>&gt;</span> escreveu:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">Andre Carneiro wrote:<br>
&gt; Eu achei isso<br>
</div>&gt; aqui:*Devel::Size*&lt;<a href="http://search.cpan.org/%7Etels/Devel-Size-0.71/lib/Devel/Size.pm" target="_blank">http://search.cpan.org/%7Etels/Devel-Size-0.71/lib/Devel/Size.pm</a>&gt;<br>
<div class="im">&gt;<br>
&gt; Não consigo desalocar com isso, mas consigo monitorar., mas pelo<br>
&gt; menos dá pra monitorar algumas coisas com isso.<br>
&gt;<br>
&gt; Se alguém souber de algum módulo onde eu posso, através da variável<br>
&gt; onde o objeto está, desalocar &#39;na marra&#39;, me avisem. Quanto a mim vou<br>
&gt; continuar procurando alguma solução...<br>
&gt;<br>
<br>
</div>André,<br>
<br>
Desculpe a demora em responder, meu amigo. O fuso horário não me ajuda a<br>
acompanhar nada em tempo real, agora...<br>
<br></blockquote><div> </div><div>Relaxa !!!<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Perguntas simples, para começar:<br>
<br>
1. Eu vi o trecho de código, mas não consigo executar aquilo para<br>
reproduzir o problema. Será que você pode reduzir o problema ao mínimo<br>
de código **funcional** que eu possa rodar aqui para reproduzir?<br>
<br></blockquote><div><br> Humm... vou mandar sim, mas num outro post, quando eu chegar em casa(amanhã provavelmente), estou de saída agora.<br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

2. Como este módulo é &quot;Pure Perl&quot;, eu não acredito na possibilidade de<br>
ele ser o responsável pelo seu memory leak. Módulos &quot;Pure Perl&quot; estão<br>
100% sob o controle do Perl, e se houver um memory leak você deveria<br>
observar ele em outros lugares também. Eu recomendo que você procure por<br>
módulos e dependências do seu módulo que não sejam Pure Perl e que<br>
estejam embaixo da cadeia de chamadas do seu método get(). Isso vai te<br>
dar uma idéia mais clara de onde está o problema.<br>
<br></blockquote><div><br>Sinto dizer que é. Eu isolei os &#39;gets&#39; 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 &#39;pras cucuia...&#39;, e mandou uma discussão em um fórum em alemão, onde um problema semelhante com o módulo ocorre.<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
3. Eu acho que foi o Nilson que chamou a atenção, mas o<br>
HTML::TreeBuilder é problemático. Se voce estiver usando ele ou algum<br>
ooutro HTML parser, eles podem ser os responsáveis pelo seu memory leak.<br>
<br></blockquote><div> </div><div>Sim, o TreeBuilder é problemático, mas o método &#39;delete&#39; 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!<br>
<br>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 &#39;vazamento&#39;. De qualquer forma ainda estou analisando.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

4. O pessoal da lista já sugeriu, e eu acho que é um bom work-around<br>
para agora se você usar fork() e ler os resultados da sua coleta de<br>
dados de um arquivo temporário (FIle::Temp) ou de um Named Pipe no disco.<br>
<br>
  *  *  *<br>
<br></blockquote><div><br>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.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Aqui tem minha sugestõa de estratégia: use fork(), IO::Select, e<br>
IO::Event; dispare processos com open() que escrevam dados de volta para<br>
o seu programa (logue STDERR à parte).<br>
<br>
Monitore os filehandles abertos para saber quem terminou (use IO::Select<br>
e IO::Event para isso), leia os dados do filehandle quando for apropriado.<br>
<br>
Depois de ler os dados do processo-filho de volta no processo principal,<br>
certifique-se de que você chamou close() no filehandle (o Perl vai<br>
chamar wait() e esperar que o processo-filho morra. O linux vai reclamar<br>
 até mesmo a memória que você não pode mais alcançar).<br>
<br>
Com isto, você talvez se livre do seu memory leak, e vai certamente<br>
aumentar a velocidade das suas visitas.<br>
<br></blockquote><div><br>Quanto a velocidade eu tenho minhas dúvidas, mas vou tentar mesmo assim,
 mesmo porque já estou sem idéias.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Espero que isso ajude.<br>
<br>
Boa sorte, e putamplexos!<br></blockquote><div><br><br><br><br>Valeu Champs!  Keep wrecking!<br><br><br>Cheers!<br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<font color="#888888">--<br>
Luis Motta Campos is a DBA,<br>
Perl Programmer, foodie and photographer.<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>