Vou ser sincero contigo,
a pouco tempo eu precisei fazer um esquema pra uma empresa de envios SMS, e
foi pancada, eles enviam na média de 6milhões de mensagens por mês.

A solução que tive que utilizar, criar processos em background utilizando a
função exec() ou shell_exec() pra isso. Alguns processos rodam por 2 ou 3
horas, mas consomem em média 5MB de RAM.

Como eu utilizo um VPS pude usar esse recurso, mas eu sei que servidores
compartilhados não oferecem isso, e se você tentar fazer direto no browser,
irá expirar o tempo limite do processo, que está entre 30 e 90 segundos.

Confesso que esse é um problema sério, pois um envio de 24mil emails pode
consumir um bom tempo, e não vejo outra solução a não ser abrindo processos
no servidor.

Uma boa possíbilidade é você agendar o envio utilizando um cron, e fazer
isso utilizando o comando PHP direto, e não o wget, isso também pode
funcionar muito bem. Você pode agendar uma tarefa para ser executada a cada
30min, 10min, ou de hora em hora, verificando se há envios agendados, e
então rodar o comando PHP para o script de envio, dae você pode fazer
SELECTs no banco de dados em lotes paginados, de 1000 em 1000, isso fará o
consumo de memória baixar bastante.

Se você fizer SELECT * FROM tabela, e retornar de uma vez os 24mil
registros, sempre estourará a memória.

Falow!


2009/7/21 Vinicius Cruz <[email protected]>

> Pois é, Robson
> Vi isso numa outra thread da lista. Alguma ideia para o caso de dividir em
> lote, sem que o usuário que está enviando os emails, tenha que ficar
> clicando em "enviar próximo lote"?
>
> Dentro do foreach que pega os emails do banco, coloquei um echo e exit, pra
> parar na primeira linha, e eu retornar o total de memória usada, mas ele já
> dá o erro fatal.
>
> Uma solução que pensei, não sei se muito elegante, era colocar o processo
> recursivo com paginação. Assim, no caso do método que envia, teria o
> parâmetro $paginacao (a cada 1000 email, por exemplo). Enquanto não terminar
> o envio de emails, dá um redirect para o próprio método para a próxima
> página. Ao término, volta para o painel da newsletter.
>
> É viável essa solução? Só preciso ter cuidado pra não cair em loop
> infinito. =)
>
> Vinicius
>
> 2009/7/21 Robson Mendonça <[email protected]>
>
> Olá,
>> eu uso 48MB nos meus servidores de deploy, e normalmente tento manter
>> baixo o consumo de memória por processo. Quando se aumenta muito esse valor,
>> dois ou três processos acabam pendurando o servidor.
>>
>> O mais interessante seria você dividir esses 24mil emails em lotes, com um
>> intervalinho de tempo entre cada lote, para o servidor pegar folêgo.
>>
>> É só uma opinião, tentar resolver problema de software jogando mais
>> hardware em cima, pode causar problemas irreverssíveis num futuro próximo,
>> principalmente se esses 24mil email podem virar 30mil, 40mil, e outros mil
>> mais.
>>
>> Falow!
>>
>>
>> 2009/7/21 Vinicius Cruz <[email protected]>
>>
>>> 128Mb é um valor bom?
>>>
>>> 2009/7/21 Marcelo Ferreira <[email protected]>
>>>
>>> Provavelmente não, senão o pessoal iria usar até o talo. Faz como o
>>>> pessoal falou, entre em contato com a empresa que hospeda o site, para ver
>>>> se é possível aumentar a memória.
>>>>
>>>> 2009/7/21 Vinicius Cruz <[email protected]>
>>>>
>>>> Poderia usar o ini_set("memory_limit", "128M"); ?
>>>>> 2009/7/21 Newton Wagner <[email protected]>
>>>>>
>>>>> Não sei se estou viajando aqui, mas segundo essa mensagem de erro, o
>>>>>> seu servidor tem apenas 64MB de memória disponível para o PHP.
>>>>>>
>>>>>> 67108864 bytes / 1024 (kb) / 1024 = 64mb
>>>>>>
>>>>>> Você não acha que isso é muito pouco não? :D. Estou cmo o Anderson,
>>>>>> entre em contato com a administração do servidor onde está hospedado o
>>>>>> site do seu cliente.
>>>>>>
>>>>>> 2009/7/20 Anderson Unsonst <[email protected]>:
>>>>>> > velho esse servidor é confiavel ? pede ao suporte deles uma analise
>>>>>> de
>>>>>> > performace
>>>>>> >
>>>>>> > _______________________________________________
>>>>>> > Lista mailing list
>>>>>> > [email protected]
>>>>>> > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>> >
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Newton Wagner
>>>>>>
>>>>>> skype: newtonwagner
>>>>>> msn/gtalk: [email protected]
>>>>>>
>>>>>> http://www.newtonwagner.net/
>>>>>> - http://www.diariodaselva.com.br/
>>>>>>
>>>>>> _______________________________________________
>>>>>> Lista mailing list
>>>>>> [email protected]
>>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Lista mailing list
>>>>> [email protected]
>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Lista mailing list
>>>> [email protected]
>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Lista mailing list
>>> [email protected]
>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>
>>>
>>
>>
>> --
>> Robson Mendonça
>> http://www.myweboncreate.com
>> CTO at LEC/UFRGS (Cognitive Studies Lab)
>> LEC - Laboratório de Estudos Cognitivos - UFRGS
>> Centro de Excelência Sun para Desenvolvimento de Soluções de TI para
>> Educação
>> Fundação Pensamento Digital - www.pensamentodigital.org.br
>>
>> _______________________________________________
>> Lista mailing list
>> [email protected]
>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>
>>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>


-- 
Robson Mendonça
http://www.myweboncreate.com
CTO at LEC/UFRGS (Cognitive Studies Lab)
LEC - Laboratório de Estudos Cognitivos - UFRGS
Centro de Excelência Sun para Desenvolvimento de Soluções de TI para
Educação
Fundação Pensamento Digital - www.pensamentodigital.org.br
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a