[Cascavel-pm] Perl X RAM (memória)

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Quinta Janeiro 20 05:49:43 PST 2011


João,

Este artigo aqui deve lhe dar idéias: http://acidcycles.wordpress.com/2010/11/28/a-journey-of-optimizing-perl/, principalmente sobre usar o Devel::NYTProf para identificar detalhes específicos do código.

Você está usando algum UNIX certo? Eu tentaria o seguinte: parar de usar system para fazer as chamadas. Use fork e controle os processos filhos (Parallel::ForkManager, por exemplo). Quando processo filho é chamado dessa forma, o código do processo pai será copiado para os filhos e isso significa que os módulos Perl que você usa também serão.

Como a maioria de UNIX decentes implementam COW, você só vai ter uma cópia dos resultados em memória (se não tentar alterar nada das variáveis).

Tem outras coisas que você pode usar, como vetores (vectors) ao invés de arrays e usar arrays ao invés de hashes. Verifique os escopos das variáveis também para que elas sejam enviadas ao garbage collector o mais cedo possível.

Mais que isso, você vai ter que postar algum código aqui para darmos palpites.

[]'s
Alceu

--- Em qui, 20/1/11, João André Simioni <jasimioni em gmail.com> escreveu:

> De: João André Simioni <jasimioni em gmail.com>
> Assunto: Re: [Cascavel-pm] Perl X RAM (memória)
> Para: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
> Data: Quinta-feira, 20 de Janeiro de 2011, 4:46
> Blabos,
> 
> Ele está chamando o script.pl com & comercial no final
> - assim a Shell
> imediatamente coloca o processo em background e o system
> retorna
> imediatamente. Ele consegue os múltiplos processos
> paralelos.
> 
> Mas para o sistema operacional, é como se tivesse
> executado cada um
> deles separadamente e por isso a quantidade de memória
> excessiva (não
> compartilham nenhuma matriz de dados, nem nada assim).
> 
> []'s
> 
> Joao Andre
> 
> 
> 
> 2011/1/20 Blabos de Blebe <blabos em gmail.com>:
> > Puta merda!
> >
> > Não é que se a gente não tomar cuidado bizonhice
> pega!
> >
> > Aff...
> >
> > 2011/1/20 Alexei Znamensky <russoz em gmail.com>:
> >> Blabos
> >>
> >> 2011/1/20 Blabos de Blebe <blabos em gmail.com>
> >>>
> >>> Não foi o que você perguntou, mas
> considere:
> >>>
> >>> foo.pl:
> >>> #!/usr/bin/perl
> >>>
> >>> print $ARGV[0], $/;
> >>> `sleep 5`;
> >>
> >> aspas invertidas?? WTF?
> >> perldoc -f sleep
> >>
> >>>
> >>> ___
> >>>
> >>> perl -E 'while($i++ <
> 10){system("./foo.pl", $i)}'
> >>>
> >>> perldoc -f system:
> >>> Does exactly the same thing as exec LIST ,
> except that a fork is done
> >>> first, and the parent process waits for the
> child process to exit.
> >>>
> >>>
> >>> Então não tem chamada parelela nenhuma
> acontecendo.
> >>>
> >>> Abraços
> >>>
> >>> 2011/1/20 Lindolfo Lorn Rodrigues <lorn.br em gmail.com>:
> >>> > Cara, usar system não é uma boa pratica
> para cada chamada no system ele
> >>> > vai
> >>> > carregar um bash para tratar o STDOUT que
> você manda para o /dev/null,
> >>> > eu
> >>> > recomendo você dar uma olhada no POE,
> ele é um sistema de 'threads' e
> >>> > você
> >>> > pode construir seu system dentro dele, e
> ele seria o seu "script chefe"
> >>> > porque ele foi feito para isso.
> >>> > E ele tem um cookbook http://poe.perl.org/?POE_Cookbook quando eu usei
> >>> > ele,
> >>> > eu peguei um cookbook ( receita de bolo )
> que mais se parecia com o meu
> >>> > problema e mudei um pouco com o meu
> programa e etc. No seu caso parece
> >>> > que
> >>> > você que gerenciar
> >>> > processos http://poe.perl.org/?POE_Cookbook/Child_Component.
> >>> > Minha principal dica é, não use system
> faça seus programas Perl
> >>> > conversarem
> >>> > com eles mesmo usando IPC, TCP sei lá, o
> POE resolve tudo isso para você
> >>> > caso tenha alguma duvida pergunte ai,
> flw.
> >>> > 2011/1/20 Tom Mostard <capmostarda em gmail.com>
> >>> >>
> >>> >> Olá, pessoal!
> >>> >>
> >>> >> Estou tendo um problema de memória
> com scripts em Perl.
> >>> >> Alguém aí teve algum problema
> parecido?
> >>> >>
> >>> >> Tenho um "pequeno" sistema que
> precisa executar vários scripts Perl em
> >>> >> paralelo.
> >>> >> Então existe um script Perl "chefe"
> que fica responsável por executar
> >>> >> eles
> >>> >> com parâmetros diferentes usando
> system().
> >>> >>
> >>> >> O sistema acessa vários bancos de
> dados e a depender do banco, da
> >>> >> tabela e
> >>> >> do campo ele executa um módulo
> específico.
> >>> >> Uso o MySQL em outra máquina para
> não abusar da memória.
> >>> >>
> >>> >> Script-chefe:
> >>> >>
> >>> >> while ( my $i < $execucoes ) #
> são execuções limitadas, mas por
> >>> >> enquanto
> >>> >> são 60
> >>> >> {
> >>> >>     system( './script.pl
> $parametro1 > /dev/null & ' );
> >>> >> }
> >>> >>
> >>> >> Dentro do script é carregado um
> módulo usando require assim:
> >>> >>
> >>> >> require $ARGV[ 0 ].".pm";
> >>> >>
> >>> >> Funciona tudo certo, se rodo 20,
> funciona tudo normal e eles ocupam 158
> >>> >> MB
> >>> >> de memória.
> >>> >> Se rodo 40, eles ocupam 316 MB de
> memória além da memória usada pelo
> >>> >> sistema.
> >>> >> Me parece que cada script carregado
> usa 8 MB em média. (Isso é
> >>> >> possível/normal?)
> >>> >> Quando uso 60, nem todos os scripts
> são executados.
> >>> >> Existe alguma maneira de executar um
> script otimizando o uso de memória
> >>> >> ou
> >>> >> vou ter que reavaliar o código?
> >>> >> Já revisei o código e eliminei
> arrays, variáveis de conexões com bancos
> >>> >> desnecessárias.
> >>> >> Existe algo mais que eu possa fazer?
> >>> >>
> >>> >> Abraços,
> >>> >>
> >>> >> Tom
> >>> >>
> >>> >>
> _______________________________________________
> >>> >> Cascavel-pm mailing list
> >>> >> Cascavel-pm em pm.org
> >>> >> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> > lorn at lornlab dot org
> >>> > Lindolfo "Lorn" Rodrigues
> >>> >
> >>> >
> >>> >
> _______________________________________________
> >>> > Cascavel-pm mailing list
> >>> > Cascavel-pm em pm.org
> >>> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >>> >
> >>>
> _______________________________________________
> >>> Cascavel-pm mailing list
> >>> Cascavel-pm em pm.org
> >>> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >>
> >>
> >>
> >> --
> >> Alexei Znamensky [russoz_gmail_com]
> [russoz.wordpress.com]
> >> [www.flickr.com/photos/alexeiz]
> >> «Only love / Can bring the rain / That makes
> you yearn to the sky»
> >>
> >> _______________________________________________
> >> Cascavel-pm mailing list
> >> Cascavel-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >>
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
> 


      


Mais detalhes sobre a lista de discussão Cascavel-pm