O tempo de carregamento do arquivo PHP, talvez relacionado ao NFS?

2

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 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.

Minhas descobertas

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!

O que eu suspeito

É 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.

Perguntas

  1. Se houver algum veterano do XHProf ou PHP que possa confirmar se o realpath_cache do PHP crescente teve algum impacto no tempo informado em load:: do XHProf?
  2. Quais mecanismos subjacentes de cache devo ter conhecimento no Linux que podem ter um impacto?
  3. O mesmo que acima, mas para o NFS?
por Brian 13.01.2014 / 19:08

0 respostas

Tags