Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hackmbh

500 Internal Server Error em consulta no BD

Recommended Posts

Srs!

 

Fiz um sistema de registro de ligações. O sistema de busca possibilita trazer os resultados em período de tempo. Se tento buscar, por exemplo: ligações entre 30 dias. Retorna cerca de pouco mais de 500 registros, até esse momento tudo ok. Ele retorna os dados em uma tabela do Bootstrap 3.

 

Quando tento buscar ligações com um período maior de 30 dias, ele deveria retornar mais de 1000 registros e novamente apresenta-lós na tabela, mas redireciona para 500 Internal Server Error.

 

Já alterei o memory_limit do php.ini que estava com 128 passei para 2000 e mesmo assim, nada. Não estou usando LIMIT do MySQL e paginação via PHP, porque a paginação será executado via jQuery após o carregamento dos resultados.

 

Estou usando PHP 5.5 no server. A interface do sistema está com tema do Bootstrap 3.0.

 

Alguém poderia me passar alguma orientação?

 

Obrigado!

 

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Apache Server at solarisempresa.com Port 80

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algum erro no seu codigo!

 

habilite o display_errors, ou faça um um debug.

 

Faça depuração com xdebug!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se estiver usando Linux, veja os logs do apache com

cat  /var/log/apache2/error.log

 

 

Tem algum erro no seu codigo!

 

habilite o display_errors, ou faça um um debug.

 

Faça depuração com xdebug!

 

Bom, ativei o display error e o error_reporting está da seguinte forma:

error_reporting = E_ALL & ~E_NOTICE

Luis Paulo, não apresenta erros. Vou tentar com xdebug.

 

O bloco Resource Limits:

max_execution_time = 300
max_input_time = 60
max_input_vars = 1000
memory_limit = 512M

Marcos Xavier, na pasta do sistema, o Cpanel criou um arquivo error_log com as seguintes linhas. Seria isso?

[27-Nov-2014 07:31:10 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 524288 bytes) in /home/solarise/public_html/atendimento/admin/system/empresas/index.php on line 92
[27-Nov-2014 07:35:23 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 524288 bytes) in /home/solarise/public_html/atendimento/admin/system/empresas/index.php on line 92
[27-Nov-2014 07:49:27 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 524288 bytes) in /home/solarise/public_html/atendimento/admin/system/empresas/index.php on line 92
[27-Nov-2014 07:49:45 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 524288 bytes) in /home/solarise/public_html/atendimento/admin/system/empresas/index.php on line 92
[27-Nov-2014 07:52:07 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 89 bytes) in /home/solarise/public_html/atendimento/_app/Conn/Read.class.php on line 103
[27-Nov-2014 07:52:27 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in /home/solarise/public_html/atendimento/_app/Conn/Read.class.php on line 103
[27-Nov-2014 07:52:29 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 1 bytes) in /home/solarise/public_html/atendimento/_app/Conn/Read.class.php on line 103
[27-Nov-2014 07:52:30 America/New_York] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 1 bytes) in /home/solarise/public_html/atendimento/_app/Conn/Read.class.php on line 103

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 1 bytes) in /home/solarise/public_html/atendimento/_app/Conn/Read.class.php on line 103

 

class Read linha 103.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://pastebin.com/YpdpkJMR

 

Segue a classe, mas o mesmo não deveria ocorrer em outras consultas? O erro só ocorre quando a consulta retorna uma quantidade grande de resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então e um estouro de memoria!

 

Se vc ja mexeu no memory_limit, vai te que da uma olhada no que ta sendo executado antes de chega nesse fethcAll();

 

Wordpress da muito desses trampo, prq executa muita porcaria antes de chega nas consuntas sql (qndo vc entope ele de plugin).

 

Ou melhora o desempenho do servidor ou enxuga seu codigo! A unica coisa que me vem a cabeça.

 

Prq afinal 1000 registro e pouco pra um servidor mysql. ja fiz consulta com 50 mil sem problemas com 500 mb de RAM =X

Compartilhar este post


Link para o post
Compartilhar em outros sites

Srs!

 

Consegui resolver.

 

É o seguinte, o problema não estava no meu código e nem no php.ini.

 

O problema era por causa de um bloqueio por parte do modsecurity do apache (firewall do serviço web). https://github.com/SpiderLabs/ModSecurity/wiki/Reference-ManualYouHum

 

Ele tem como default 512 KB, qualquer coisa acima disso ele joga para 500 Internal Server Error.

 

Foi necessário criar uma exceção no arquivo "/etc/httpd/conf/modsec2.custom.local.conf" com o seguinte padrão:

SecRule SERVER_NAME "meudominio.com.br" phase:1,nolog,allow,pass,ctl:responseBodyLimit=52428800,id:3000000

Depois restartar o serviço httpd:

service httpd restart

No meu caso 52428800, corresponde a 50 MB.

 

Sim, foi necessário permitir responseBodyLimit de 50 MB. Após isso deu tudo certo. Apresentou a tabela conforme solicitado na consulta. Uma tabela com 4.983 resultados. O interessante que verificando no apache, antes o trafego para trazer a tabela foi 22 MB.

 

Agora fica a dúvida, seria essa a melhor saída? Algo me diz que não! Mesmo que eu diminua para 30 MB para corresponder com o que se exige nessa consulta, e se eu realizar uma busca em um período maior. Tipo de um ano ou mais. Levando em consideração que estou falando de um CRM.

 

Sem falar em quem hospedar o sistema em um servidor compartilhado, onde com certeza essa alteração não seria permitida.

 

Talvez, tenha que rever sim o código ou as possibilidade de busca para o usuário. Por exemplo, permitir buscas para um intervalo de no máximo três meses.

 

Muito obrigado! Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos,

 

Antes estava utilizando o LIMIT para realizar a paginação, mas começou a ficar complexo com a necessidade de ordenar por coluna, pesquisar nas colunas, paginar e auto complete nas pesquisas. Para isso, resolvi utilizar o plugin jQuery DataTables - https://datatables.net/.

 

Por hora, é suficiente.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.