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

Leonardo Ruoso leonardo.ruoso em gmail.com
Domingo Janeiro 23 15:15:22 PST 2011


Sua máquina não está aguentando 60 processos rodando simultaneamente, não
sei se é isso que você quer, mas ao colocar seus "filhos" em background você
está fazendo com que todos sejam executados simultaneamente. Só que seus
filhos são como usuários concorrentes para o sistema operacional, então você
deve pensar como se houvesse 60 pessoas trabalhando no seu servidor
simultaneamente, pior, todas com processos rodando ao mesmo tempo... você
consegue imaginar 60 firefox distintos utilizando a sua máquina ao mesmo
tempo e acessando diferentes vídeos no you tube? pode até ser que sua
máquina aguente, mesmo assim vai concordar comigo que toda máquina tem um
limite.

Você tem consciência que seu script, do jeito que está, poderia ser escrito
em bash, sem nenhum prejuízo. Ou não tem? É verdade que você pode fazer algo
mais interessante/elegante com AnyEvent ou POE (são soluções que exigem um
pouco mais de conhecimento de sintaxe e de programação do que o seu script
transparece) pode ser um ótimo aprendizado, mas também pode ser um passo
maior que a perna para o momento imediato... Eu não compreendi contudo se é
um requisito rodar simultaneamente tantos scripts filhos quanto possíveis,
nesse caso, mesmo usando fork, AnyEvent ou POE ainda haverá um limite, maior
que usando system (bem maior), mas haverá.

Sou sempre a favor de aprender a solução mais elegante, mas entendo que
algumas vezes precisamos de um hack e pode ser que o seu hack seja colocar
um novo while na entrada do seu while atual do qual você só sai depois de
verificar que a máquina tem recursos disponíveis e que seu o load está
aceitável, lembrando de colocar um sleep 30 antes do final do while interno.
Sim, tosco, mas pode lhe dar o tempo que precisa para estudar POE e AnyEvent
sem ninguém resmungando ao seu pé-do-ouvido...

Atenciosamente,

Leonardo Ruoso (CE1921JP)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
leonardo em ruoso.com · (11) 3522-9612 · (85) 8787-0312
http://leonardo.ruoso.com · http://twitter.com/LeonardoRuoso
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
*Leonardo Ruoso *· * *Gerente de Projetos · Analista de Sistemas
Comunicação Social/Jornalismo - UFC/2006 · Telecomunicações - ETFCE/1998
*Internet e inovação tecnológica deste 1996*
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .


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
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20110123/eb1708e3/attachment.html>


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