
Estou programando uma página web em PHP e comecei a ver algum comportamento estranho no meu computador, em algum momento o apache/php demora muito para mostrar a página web no navegador (8 segundos), primeiro pensei que era minha aplicação que tinha um bug, então fiz uma função debug para controlar o tempo necessário para finalizar meu script, mas quando comecei a recarregar a página várias vezes (pressionando F5) notei que não era meu script e sim algum outro processo que paralisa o apache ( ou php, ou mysql) e depois libera porque apertar F5 várias vezes mostra que às vezes o script termina rápido e às vezes demora muito:
[time_start] => Array
(
[0] => 1446841239.1471
[1] => 0.0581
[2] => 0.0589
[3] => 0.0564
[4] => 8.0531
[5] => 0.0574
[6] => 0.0621
[7] => 8.0582
[8] => 0.0548
[9] => 8.0457
[10] => 0.0755
[11] => 8.0555
[12] => 0.0512
[13] => 8.0447
[14] => 0.062
[15] => 8.0905
[16] => 0.0602
[17] => 8.0556
[18] => 0.0582
[19] => 8.0492
[20] => 0.0551
)
Cada etapa é o mesmo script executado após F5 ser pressionado, e deve levar sempre o mesmo tempo, mas às vezes leva 8 segundos para terminar, e isso me incomoda porque quando está parado SEMPRE leva cerca de 8 segundos
Portanto, a questão é: alguma idéia de como posso encontrar o processo que está paralisando meu script?
Ps.- Estou executando muitas coisas em primeiro plano porque é meu computador pessoal, mas mesmo quando uso apenas o navegador sem nenhum outro aplicativo em execução ele ainda trava, então deve ser algo rodando em segundo plano, como posso encontrá-lo ?
Responder1
8 segundos consistentes implicam que algum procedimento potencialmente de longa execução tem um tempo limite definido. Sem saber o que o código PHP faz, vou adivinhar que você tem um horário de DNS. Se o PHP estiver realizando alguma E/S de rede ou algo assim, provavelmente acionará uma pesquisa de DNS. De vez em quando, você vê o tempo limite de uma consulta DNS e o PHP faz o que quer que faça nessa eventualidade.
O único lugar onde posso ver que os tempos limite do DNS estão definidos é em /etc/resolv.conf
, ou talvez quando o resolver(3)
código no GNU libc é compilado. Infelizmente, a página de manual resolv.conf
afirma que um tempo limite de 5 segundos é o padrão compilado, então só posso dizer que estou supondo isso.