
O problema
Estou tentando diagnosticar um problema de desempenho em um site Drupal que estou desenvolvendo. De manhã, quando o site não vê nenhum tráfego (nem mesmo uma execução do cron) por mais de 8 horas, a página inicial leva cerca de 3,5 segundos para carregar. Recarregar a página leva cerca de 250 ms.
Este é um servidor web de desenvolvimento, com uma versão bastante antiga do PHP instalada (5.3.3).Todos os arquivos são montados estaticamente via NFS(que acredito ser a causa raiz, mais sobre isso abaixo).
Para ajudar a diagnosticar, instaleiXHProfneste servidor de desenvolvimento e habilitou um módulo Drupal que carrega a página de perfil e exibe os dados de perfil em uma tabela bem classificável. Para quem não está familiarizado com o XHProf, ele fornece dados sobre cada função chamada e coisas como tempo total gasto, uso de memória e chamadas para essa função.
Minhas descobertas
No golpe inicial "lento", a função PHP file_exists
demorou1400msde 82 chamadas, representando cerca de 43% do tempo total de execução. No carregamento de página subsequente, a mesma função file_exists
foi novamente chamada 82 vezes, mas desta vez foi drasticamente reduzida para apenas3msrepresentando apenas 1% do tempo total de execução.
Além disso, observei o arquivo que demorou mais para o PHP carregar na memória (que é o que acredito que o load::
prefixo significa no nome de uma função). Este arquivo de modelo PHP demorou muito42mspara carregar na primeira vez e somente3msna recarga subsequente!
O que eu suspeito
Está claro para mim que há algum tipo de cache acontecendo em algum lugar - só não sei onde ainda. A documentação PHP parao arquivo existemencione que a saída desta função é armazenada em cache. então descobri que possocontrolar o tamanho deste cachee provavelmente deveria ser aumentado do padrão 16k para algo mais apropriado para Drupal (que carrega toneladas de arquivos relativos).
No entanto, embora eu ache que isso reduziria a quantidade de tempo gasto em file_exists
, não tenho certeza se isso afetará o tempo que o PHP realmente levacarregandoo arquivo (o que load::
mencionei anteriormente) e aumentar esse valor parece apenas ocultar problemas de desempenho subjacentes com o sistema de arquivos.
Questões
- Se houver algum veterano do XHProf ou PHP que possa confirmar se o aumento do PHP
realpath_cache
teve algum impacto no tempo relatadoload::
pelo XHProf? - Quais mecanismos de cache subjacentes devo conhecer no Linux que podem ter um impacto?
- O mesmo que acima, mas para NFS?