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

Blabos de Blebe blabos em gmail.com
Quinta Janeiro 20 04:20:16 PST 2011


Não foi o que você perguntou, mas considere:

foo.pl:
#!/usr/bin/perl

print $ARGV[0], $/;
`sleep 5`;
___

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
>


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