Script Perl e erros de falta de memória

1

Temos um servidor de médio porte com 48 GB de RAM e estamos tentando importar uma lista de cerca de 100.000 assinantes de e-mail opt-in para um novo sistema de gerenciamento de listas escrito em Perl. Pelo que entendi, o Perl não impõe limites de memória como o PHP, e ainda assim estamos continuamente recebendo erros internos do servidor ao tentar fazer a importação. Ao investigar os logs de erros, vemos que o script ficou sem memória. Como o perl não tem uma configuração para limitar o uso da memória (até onde eu sei), por que estamos recebendo esses erros? Eu duvido que uma importação pequena como essa esteja consumindo 48GB de memória RAM.

Nós comprometemos e dividimos a lista em blocos de 10.000, mas gostaríamos de descobrir a causa raiz para futuras correções. Esta é uma máquina do CentOS com o Litespeed como servidor web.

    
por Kevin 29.02.2012 / 21:41

2 respostas

2

É difícil depurar sem ver o código, mas você pode estar lendo o arquivo na memória, em vez de processá-lo linha por linha usando foreach $line (<FILE>) . Além disso, se você adicionar isso a uma variável ou matriz, será o mesmo. Faça todo o processamento em vez do foreach . Mesmo assim, 100 mil e-mails não devem usar 48 Gb.

    
por 29.02.2012 / 21:46
0

Muitos fatores podem ser aplicados aqui (parâmetros de memória do kernel, selinux, verificações de integridade CGI pelo servidor web), mas ulimit é provavelmente o culpado mais provável; comece com /etc/limits.conf . Dito isso, a execução de um script de importação em lote como CGI provavelmente não é sua melhor escolha - mesmo que não fique sem memória, a maioria dos servidores da web não desfruta de scripts CGI de longa duração e você pode terminar de qualquer maneira. Esse tipo de script funcionará melhor a partir da linha de comando, de preferência com pontos de verificação ou pelo menos logs, para que você possa ver até onde você chegou com a importação, caso o script morra antes da conclusão.

    
por 22.03.2012 / 23:08

Tags