PHP Error: Allowed memory size of 8388608 bytes exhausted...
O sarg é muito bom, tem vários tipos de relatório e tal... mas infelizmente aqui na empresa o coitadinha tava abrindo as perninhas, ou como diriam meus colegas de Bagé: Tava queimando óleo.
O nosso access.log, do squid, fica com cerca de 30 a 60 Megabytes. Imagina o que é 60 Mb só de texto!!! Pois é, depois de algumas tentativas frustradas, entre elas compilação, troca de versão, split em arquivos, os erros como segmentation fault continuavam então decidi procurar outra ferramenta para fazer relatórios de acesso.
Nesse momente vim a conhecer o MySar(http://giannis.stoilis.gr/software/mysar/). Não vou abordar a instalação dele aqui. Se bem que é simples. Para os interessados tem um tutorial no VOL(http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5221).
O MySar usa banco de dados Mysql e vai guardando os registro lá. Depois ele monta os relatórios com PHP. Como os registros estão em um banco há várias vantegens. Uma delas por exemplo é um espécie de daemon que roda de minuto em minuto adicionando os registros do accees.log para o banco. Então você tem o relatório de acesso quase que instantaneamente. E não força o processador e HD já qua são adicionados registros de pouco a pouco(minuto a minuto). O sarg já pegava o arquivo de log e fazia o relatório todo de uma vez... aí que ele se perde quando o arquivo é muito grande. Mas enfim.. testem que é bom.
Pois bém aqui na empresa o acesso a internet é muito usado. Trafega pelo proxy cerca de 7,5 Gb/dia. Desses quase 8 Gb 20% está no cache ;-)
Pois bem... são adicionados cerca de 1300 registros do arquivo de log do squid para o banco do Mysar por minuto. Minha base de dados está crescendo muito.
Numa dessas eu estava nagevando pelo relatório, que usa SQL, lógicamente, e retornou o erro do título desse post.
Os scripts SQL necessitam de uma certa quantidade de memória para executar. E como minha consultas estã retornando muitos registros essa quantidade de memória excedeu.
Pra resolver é simples:
Em um script php que faz a query você pode usar isto:
Nesse caso esse script em específico vai ter o limite de 12Mb para usar. Caso não seja o suficiente pode-se ir aumentando até o chegar no tamanho ideal. Ou pega e aumenta de vez lah pros 30Mb.
Se for um script que você não conhece, de outra pessoa, ou for interessante que essa alteração se replique para todos os demais scripts, pode ser setado esse valor no php.ini:
Lembre-se que ao invés de simplesmente aumentar a quantidade de memória o script pode ser reprogramado. Faça uma busca por "tunning sql querys". Pode ser melhor.
A dica eu tirei daqui.
O nosso access.log, do squid, fica com cerca de 30 a 60 Megabytes. Imagina o que é 60 Mb só de texto!!! Pois é, depois de algumas tentativas frustradas, entre elas compilação, troca de versão, split em arquivos, os erros como segmentation fault continuavam então decidi procurar outra ferramenta para fazer relatórios de acesso.
Nesse momente vim a conhecer o MySar(http://giannis.stoilis.gr/software/mysar/). Não vou abordar a instalação dele aqui. Se bem que é simples. Para os interessados tem um tutorial no VOL(http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5221).
O MySar usa banco de dados Mysql e vai guardando os registro lá. Depois ele monta os relatórios com PHP. Como os registros estão em um banco há várias vantegens. Uma delas por exemplo é um espécie de daemon que roda de minuto em minuto adicionando os registros do accees.log para o banco. Então você tem o relatório de acesso quase que instantaneamente. E não força o processador e HD já qua são adicionados registros de pouco a pouco(minuto a minuto). O sarg já pegava o arquivo de log e fazia o relatório todo de uma vez... aí que ele se perde quando o arquivo é muito grande. Mas enfim.. testem que é bom.
Pois bém aqui na empresa o acesso a internet é muito usado. Trafega pelo proxy cerca de 7,5 Gb/dia. Desses quase 8 Gb 20% está no cache ;-)
Pois bem... são adicionados cerca de 1300 registros do arquivo de log do squid para o banco do Mysar por minuto. Minha base de dados está crescendo muito.
Numa dessas eu estava nagevando pelo relatório, que usa SQL, lógicamente, e retornou o erro do título desse post.
Os scripts SQL necessitam de uma certa quantidade de memória para executar. E como minha consultas estã retornando muitos registros essa quantidade de memória excedeu.
Pra resolver é simples:
Em um script php que faz a query você pode usar isto:
ini_set("memory_limit","12M");
Nesse caso esse script em específico vai ter o limite de 12Mb para usar. Caso não seja o suficiente pode-se ir aumentando até o chegar no tamanho ideal. Ou pega e aumenta de vez lah pros 30Mb.
Se for um script que você não conhece, de outra pessoa, ou for interessante que essa alteração se replique para todos os demais scripts, pode ser setado esse valor no php.ini:
memory_limit = 12M
Lembre-se que ao invés de simplesmente aumentar a quantidade de memória o script pode ser reprogramado. Faça uma busca por "tunning sql querys". Pode ser melhor.
A dica eu tirei daqui.
2 Comentários:
Somente lembrando que para utilizar o comando ini_set("memory_limit","12M"); o "SafeMode" do apache deve estar desabilitado. :)
By D D D, at 22/02/2007, 15:16
Ou entao use o importador binario, que eh escrito em C, muito mais rapido, e nao acontece problemas desse tipo.
Valew!
By Anônimo, at 03/09/2007, 23:32
Postar um comentário
<< Home