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 cron) por mais de 8 horas, a página inicial demora cerca de 3,5 segundos para ser carregada. Recarregar a página demora 250ms esperados.
Este é um servidor web de desenvolvimento, com uma versão bastante antiga do PHP instalada (5.3.3). Todos os arquivos são estaticamente montados sobre o NFS (o que eu acredito ser a causa raiz, mais sobre isso abaixo).
Para ajudar a diagnosticar, instalei XHProf neste servidor de desenvolvimento e habilitei um módulo Drupal que faz o perfil dos carregamentos de página e exibe os dados de criação de perfil em uma tabela bem classificável. Para aqueles não familiarizados com o XHProf, ele fornece dados sobre cada função chamada e coisas como o tempo total gasto, uso de memória e chamadas para essa função.
No hit "slow" inicial, a função file_exists
do PHP levou 1400ms de 82 chamadas, representando aproximadamente 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 apenas 3ms respondendo por apenas 1% do tempo total de execução.
Eu também examinei o arquivo que levou mais tempo para o PHP carregar na memória (que é o que eu acredito que o prefixo load::
significa em um nome de função). Esse arquivo de modelo PHP precisou de 42ms para carregar na primeira vez, e apenas 3ms no recarregamento subseqüente!
É claro para mim que há algum tipo de cache acontecendo em algum lugar - eu não sei ainda onde. Os documentos PHP para file_exists mencionam que a saída desta função é armazenada em cache. Então eu descobri que eu posso controlar o tamanho deste cache e ele provavelmente deveria ser aumentou do padrão 16k para algo mais apropriado para o Drupal (que carrega toneladas de arquivos relativos).
No entanto, embora eu ache que isso reduziria o tempo gasto em file_exists
, não tenho certeza se isso afetará o tempo que o PHP leva carregando o arquivo (o load::
I mencionado anteriormente) e aumentar esse valor parece estar apenas ocultando problemas de desempenho subjacentes com o sistema de arquivos.
realpath_cache
do PHP crescente teve algum impacto no tempo informado em load::
do XHProf?