Ladezeit der PHP-Datei, möglicherweise im Zusammenhang mit NFS?

Ladezeit der PHP-Datei, möglicherweise im Zusammenhang mit NFS?

Das Problem

Ich versuche, ein Leistungsproblem auf einer Drupal-Website zu diagnostizieren, die ich gerade entwickle. Morgens, wenn die Website seit über 8 Stunden keinen Verkehr verzeichnet (nicht einmal einen Cron-Lauf), dauert das Laden der Homepage etwa 3,5 Sekunden. Das Neuladen der Seite dauert voraussichtlich 250 ms.

Dies ist ein Entwicklungs-Webserver mit einer ziemlich alten installierten PHP-Version (5.3.3).Alle Dateien werden statisch über NFS gemountet(was meiner Meinung nach die Grundursache ist, mehr dazu weiter unten).

Zur Diagnose habe ich installiertXHProfauf diesem Entwicklungsserver und aktivierte ein Drupal-Modul, das Seitenladevorgänge profiliert und die Profildaten in einer gut sortierbaren Tabelle anzeigt. Für diejenigen, die mit XHProf nicht vertraut sind: Es liefert Daten zu jeder aufgerufenen Funktion und Dinge wie die insgesamt aufgewendete Zeit, Speichernutzung und Aufrufe für diese Funktion.

Meine Erkenntnisse

Beim ersten "langsamen" Treffer file_existsdauerte die PHP-Funktion1400 msvon 82 Aufrufen, was etwa 43 % der gesamten Ausführungszeit ausmacht. Beim anschließenden Laden der Seite file_existswurde dieselbe Funktion erneut 82 Mal aufgerufen, aber dieses Mal wurde sie drastisch reduziert auf nur3 msSie machen lediglich 1 % der gesamten Ausführungszeit aus.

Ich habe mir außerdem die Datei angesehen, die am längsten brauchte, um PHP in den Speicher zu laden (was meiner Meinung nach das load::Präfix bei einem Funktionsnamen bedeutet). Diese PHP-Vorlagendatei brauchte satte42 msbeim ersten Mal zu laden, und nur3 msbeim anschließenden Neuladen!

Was ich vermute

Mir ist klar, dass irgendwo eine Art Caching stattfindet - ich weiß nur noch nicht wo. Die PHP-Dokumente fürDatei existierterwähnen, dass die Ausgabe dieser Funktion zwischengespeichert wird. Ich habe dann festgestellt, dass ichKontrollieren Sie die Größe dieses Cachesund es sollte wahrscheinlich vom Standardwert von 16 KB auf einen für Drupal (das Tonnen relativer Dateien lädt) geeigneteren Wert erhöht werden.

Obwohl ich denke, dass dies den Zeitaufwand für reduzieren würde file_exists, bin ich mir nicht sicher, ob sich dies tatsächlich auf die Zeit auswirkt, die PHP benötigtWird geladendie Datei (die load::ich zuvor erwähnt habe) und das Erhöhen dieses Wertes scheint nur zugrunde liegende Leistungsprobleme mit dem Dateisystem zu verbergen.

Fragen

  1. Gibt es XHProf- oder PHP-Veteranen, die bestätigen können, ob die zunehmenden PHPs realpath_cacheAuswirkungen auf die load::von XHProf gemeldete Zeit hatten?
  2. Welche zugrunde liegenden Caching-Mechanismen sollte ich in Linux kennen, die Auswirkungen haben könnten?
  3. Wie oben, aber für NFS?

verwandte Informationen