Executando verificação de segurança...
1

[AJUDA / PHP] Página Esporadicamente Decide Carregar pela Metade

Boa tarde pessoal, tudo bem?

Peço perdão pelo título estranho, mas não pensei em nenhum melhor.

Estou tendo um problema em um sistema escrito em PHP e MySQL.

O cenário é o seguinte: É uma página no estilo "Relatório", com uma tabela que já chega na página filtrada, trazendo em média 100 a 200 resultados por filtragem quando o filtro é mais "Aberto".
É utilizado um framework de tabelas nessa página, o tal do Datatables, para uma melhor organização.

Em banco, esses resultados chegam filtrados de algumas tabelas bem grandinhas, sendo a maior delas uma que contém na faixa dos 4 a 5 milhões de registros.

O que ocorre? Bem, para resumir, em alguns momentos bem aleatórios, ao realizar essa filtragem, a página retorna apenas uma parte do conteúdo, e simplesmente o HTML para de carregar e entrega uma página totalmente pela metade, sem nem mesmo o fechamento da body e do html

Eu já aumentei alocação de memória do PHP, tempo de execução, e tudo mais. Está tudo bem elevado e o servidor não está com consumo alto em nenhum momento.
Alguém já teve algum problema parecido? Qual a orientação em um caso como este?
Já tive diversos problemas com PHP, mas todos por mais complexos que fossem, foram resolvidos com um pouco de pesquisa e estudo, mas este em específico, não encontrei nada sobre. Apenas um caso parecido com um rapaz que utilizada o FW CakePHP, mas não é o meu caso.

Carregando publicação patrocinada...
2

Veja o HTML da pagina quando o erro acontece, e tente observar em que ponto o conteúdo é cortado, se é sempre na mesma linha, ou se num determinado valor. Geralmente as coisas não dão aleatorias, mas o aleatório é o deus dos programadores, aquela palavra que usamos para justificar o injustificável. rs

1

Eu sei que não existe nada aleatório, com relação a tantos problemas que já resolvi, acho que estou em contato com esse ramo a um tempo consideravelmente suficiente pra ter chego a essa conclusão kkkkk

Eu vou usar esse termo até conseguir localizar um padrão para esse caso, o que ainda não encontrei. E inclusive, eu analisei o último registro que estava cortando em diversos casos em que isso ocorreu, nenhum era nem no mesmo registro, nem na mesma coluna, sempre em um local diferente. E, talvez o ponto mais importante que esqueci de mencionar no texto: se retornarmos a mesma página alguns minutos depois, ele aparece funcionando sem nenhum problema, isso é o que está me deixando mais encucado com a situação.

Mais um detalhe: Não há erros nos logs e nem estourado em página. Com o display all errors ele só exibe alguns notices.

1
1

Os dados são mais referentes a nível de usuário, então eles são alterados com uma frequência bem altinha até, e como tudo funciona normalmente na maioria das vezes, mesmo com alterações, não tenho certeza se pode ter relação

3

O que eu faria era imprimir os dados "raw" (joga dentro de um div oculto no inicio do body html) usando um var_dump. quando o erro ocorrer, veja qual a ultima linha da tabela que imprimiu corretamente, procure a linha seguinte a ela nos dados raw, e tente executar manualmente todo o codigo usado para desenhar uma linha no PHP.

seria interessante vc postar partes relevantes do seu codigo

1

seria interessante vc postar partes relevantes do seu codigo

Eu adoraria mesmo, gosto de compartilhar o máximo possível dos meus trabalhos pessoais com o pessoal aqui, mas este caso em específico eu realmente não tenho permissão para isso :s então vou ficar te devendo! Kkk

Mas, você deu uma ótima ideia com essa de imprimir os dados raw no início do arquivo, eu vou fazer isso e jogar numa div com display:none, e aí quando o problema ocorrer novamente, eu vou direto nela para começar a procurar. Apesar de que eu tenho quase certeza de que ao invés de uma tela pela metade, serei surpreendido com uma tela em branco, caso seja um problema de serverside ou uma "heavy query" ocorrendo

2

Boa tarde KaioPiola!

Para testar e talvez identificar o causador do problema, tenta desativar o JavaScript do DataTables nesta página, e carregá-la com a tabela apenas com marcações HTML.

Já tive alguns problemas com lentidão ao renderizar a tabela com o DataTable, mas nada parecido com o seu problema.

Como relatou que o DOM chega a ser entregue incompleto, parece algo do lado do servidor.

1

Eu mencionei o Datatables ali justamente por conta de alguém já conhecer algum problema relacionado com ele.

Mas contextualizando: O Datatables só executa depois da página já aberta, ele é client-side, então depende que todos os dados PHP já estejam carregados em página antes dele ser executado, e visto que no DOM está cortando no meio desses dados (Nenhum registro ou campo em específico, já adiantando, é bem aleatório mesmo), parece realmente ser algo server-side.

Eu estarei pegando os horários de pico de uso pra fazer novos testes essa semana, mas ficarei atento as respostas aqui quanto a outros testes que eu possa estar fazendo.

1

Chute: Poderia ser um caractere especial em linhas especificas retornadas do banco, tipo uma aspas dando conflito com um decode ou parse.