{"id":20978,"date":"2026-08-25T08:34:21","date_gmt":"2026-08-25T06:34:21","guid":{"rendered":"https:\/\/webhosting.de\/php-realpath-cache-performance-optimierung-speedboost\/"},"modified":"2026-08-25T08:34:21","modified_gmt":"2026-08-25T06:34:21","slug":"php-realpath-cache-ottimizzazione-delle-prestazioni-aumento-della-velocita","status":"publish","type":"post","link":"https:\/\/webhosting.de\/it\/php-realpath-cache-performance-optimierung-speedboost\/","title":{"rendered":"Cache Realpath di PHP: un \u201cturbo\u201d sottovalutato per le prestazioni di PHP"},"content":{"rendered":"<p>Der oft \u00fcbersehene Hebel f\u00fcr schnelle PHP-Requests hei\u00dft <strong>PHP Realpath<\/strong> Cache: Er speichert aufgel\u00f6ste Pfade im Arbeitsspeicher und reduziert teure Dateisystem-Abfragen bei include\/require. In Projekten mit Symfony, Laravel oder einem gro\u00dfen WordPress-Setup steigere ich mit einer sauberen Realpath-Konfiguration die <strong>Performance<\/strong> messbar und halte Systemcalls pro Request deutlich niedriger.<\/p>\n\n<h2>Zentrale Punkte<\/h2>\n\n<ul>\n  <li><strong>Einfacher<\/strong> Hebel: Realpath speichert Pfadaufl\u00f6sungen und spart Dateisystem-Zugriffe.<\/li>\n  <li><strong>Per-Worker<\/strong>: Jeder PHP-FPM-Prozess f\u00fchrt seinen eigenen Realpath Cache.<\/li>\n  <li><strong>Gr\u00f6\u00dfe<\/strong> z\u00e4hlt: Zu kleiner Cache verursacht Thrashing und bremst Requests.<\/li>\n  <li><strong>TTL<\/strong> steuert Aktualit\u00e4t: Lange TTL f\u00fcr stabile Deployments, kurze bei Symlinks\/Secrets.<\/li>\n  <li><strong>Monitoring<\/strong>: realpath_cache_get()\/size() zeigen Auslastung und L\u00fccken.<\/li>\n<\/ul>\n\n<h2>Was der Realpath Cache genau leistet<\/h2>\n\n<p>Bei jedem include, require oder file_get_contents l\u00f6st PHP relative Pfade zu absoluten Pfaden auf und speichert diese Ergebnisse im <strong>Cache<\/strong>. Trifft derselbe Pfad erneut ein, lese ich das Resultat aus dem Speicher und spare mir den teuren Gang ins <strong>Dateisystem<\/strong>. Dieser Mechanismus reduziert Systemcalls sp\u00fcrbar, vor allem wenn Composer-Autoloading viele Klassen und Konfigurationsdateien l\u00e4dt. Wichtig: Der Realpath Cache existiert pro Prozess, daher profitiert jeder PHP-FPM-Worker erst nach einigen Requests, wenn er seinen eigenen Cache aufgebaut hat. So entsteht ein stetiger Beschleunigungseffekt, der sich bei hoher Last besonders auszahlt.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php-performance-turbo-4821.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Warum der Cache in gro\u00dfen Frameworks z\u00e4hlt<\/h2>\n\n<p>Gro\u00dfe Frameworks und viele Plugins erzeugen pro Request zahllose <strong>Dateizugriffe<\/strong>, die ohne Caching jedes Mal Pfade neu aufl\u00f6sen m\u00fcssten. Wenn der Realpath Cache zu klein ist, verdr\u00e4ngt er \u00e4ltere Eintr\u00e4ge, neue kommen dazu, und ich beobachte pures <strong>Thrashing<\/strong>. Das Ergebnis sind wiederholte Stat- und Lookup-Operationen, die Zeit kosten und IO belasten. Praxisnah l\u00e4sst sich damit die Anzahl der Systemcalls pro Request um etwa 5\u201315 % senken, was sich bei hoher Request-Rate massiv summiert. Je modularer die Anwendung, desto gr\u00f6\u00dfer der Hebel \u00fcber einen sauber dimensionierten Realpath Cache.<\/p>\n\n<h2>So ermittle ich die passende Cache-Gr\u00f6\u00dfe<\/h2>\n\n<p>Ich z\u00e4hle zuerst die einzigartigen Pfade eines typischen Requests, sch\u00e4tze die mittlere Pfadl\u00e4nge und addiere pro Eintrag rund 128 Bytes <strong>Overhead<\/strong>. Aus Anzahl, Pfadl\u00e4nge und Overhead leite ich eine realpath_cache_size ab, die gen\u00fcgend <strong>Puffer<\/strong> bietet. Viele gr\u00f6\u00dfere Projekte landen zwischen 4 und 16 MiB, sehr umfangreiche Monorepos auch dar\u00fcber. Wichtig ist, dass der Cache nicht am Limit klebt, sonst verliere ich den Nutzen durch st\u00e4ndiges Ausr\u00e4umen. Ich erh\u00f6he in Schritten, beobachte die Auslastung und reguliere nach.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php_realpath_cache_turbo_3031.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Empfohlene Einstellungen und Beispielwerte<\/h2>\n\n<p>Standardwerte stammen aus Zeiten kleiner Codebasen und passen oft nicht mehr zu heutigen <strong>Setups<\/strong>. F\u00fcr viele produktive Anwendungen setze ich realpath_cache_size auf 4096K bis 16384K und verl\u00e4ngere realpath_cache_ttl auf 360\u2013600 <strong>Sekunden<\/strong> oder mehr. Entscheidend sind Projektgr\u00f6\u00dfe, Deploy-Frequenz und Dateisystem-Charakter. Die folgende Tabelle zeigt sinnvolle Anhaltswerte zur Orientierung und hilft beim Start ins Tuning. Danach passe ich die Zahlen \u00fcber Monitoring und Lasttests an.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Einstellung<\/th>\n      <th>H\u00e4ufiger Default<\/th>\n      <th>Gute Startwerte<\/th>\n      <th>Erwartete Wirkung<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>realpath_cache_size<\/td>\n      <td>4096K (4 MiB)<\/td>\n      <td>4096K\u201316384K<\/td>\n      <td>Reduziert <strong>Thrashing<\/strong> bei vielen Dateien<\/td>\n    <\/tr>\n    <tr>\n      <td>realpath_cache_ttl<\/td>\n      <td>120\u2013600 s<\/td>\n      <td>360\u2013900 s<\/td>\n      <td>L\u00e4ngere <strong>Cache-Halts<\/strong>, weniger erneute Aufl\u00f6sungen<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Beispiele in der php.ini: <code>realpath_cache_size = 4096K<\/code> und f\u00fcr gro\u00dfe Frameworks <code>realpath_cache_size = 16384K<\/code>. F\u00fcr die Lebensdauer nutze ich h\u00e4ufig <code>realpath_cache_ttl = 360<\/code> oder h\u00f6her bei seltenen Releases. So bleiben Pfade \u00fcber viele Requests im Speicher, ohne st\u00e4ndig neu validiert zu werden.<\/p>\n\n<h2>TTL klug w\u00e4hlen \u2013 je nach Deployment<\/h2>\n\n<p>Die richtige TTL h\u00e4ngt stark vom Deploy-Prozess und dem Einsatz von <strong>Symlinks<\/strong> ab. Wenn ich Releases per Symlink-Rotation umschalte, darf der Cache keine veralteten Pfade liefern, daher setze ich die TTL kurz oder triggere einen FPM-Neustart nach dem <strong>Rollout<\/strong>. In Kubernetes-Umgebungen mit Secrets oder ConfigMaps als Volumes reduziere ich die TTL deutlich oder deaktiviere den Realpath Cache zeitweise. Statischere Webhosting-Situationen profitieren dagegen von l\u00e4ngeren TTLs, weil sich Pfade selten \u00e4ndern. So balanciere ich Aktualit\u00e4t und Geschwindigkeit passend zur Umgebung.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php-performance-realpath-7834.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u00dcberwachen und verifizieren<\/h2>\n\n<p>Ich pr\u00fcfe regelm\u00e4\u00dfig mit <code>realpath_cache_get()<\/code>, welche Pfade im <strong>Cache<\/strong> liegen, und mit <code>realpath_cache_size()<\/code>, wie viel Speicher davon belegt ist. Wenn die Nutzung nahe der konfigurierten Gr\u00f6\u00dfe liegt, erh\u00f6he ich die <strong>Kapazit\u00e4t<\/strong> schrittweise. L\u00e4uft der Cache extrem schnell voll, deute ich das als Signal f\u00fcr mehr Speicher oder f\u00fcr zu kurze TTL. Nach gr\u00f6\u00dferen Plugin-Installationen oder Framework-Updates kontrolliere ich erneut. Nur wer die Zahlen kennt, trifft sinnvolle Tuning-Entscheidungen.<\/p>\n\n<h2>Messbare Wirkung: So messe ich Systemcalls und Latenzen<\/h2>\n\n<p>Damit das Tuning belastbar ist, messe ich vor und nach \u00c4nderungen. Auf Linux erfasse ich Dateisystem-Calls pro Request mit <code>strace<\/code> oder <code>perf<\/code>, wahlweise an einem einzelnen FPM-Worker oder an der CLI.<\/p>\n\n<ul>\n  <li><strong>Einzelner Request (CLI)<\/strong>: <code>strace -c -o \/tmp\/strace.txt php public\/index.php<\/code> liefert eine \u00dcbersicht, wie viele <code>stat()<\/code>, <code>openat()<\/code> und <code>lstat()<\/code> anfallen.<\/li>\n  <li><strong>FPM-Worker anh\u00e4ngen<\/strong>: <code>strace -fp &lt;PID&gt; -e trace=file -o \/tmp\/strace-fpm.log<\/code> zeigt nur dateibezogene Aufrufe. Vorher mit <code>ps<\/code> die PID des Workers ermitteln.<\/li>\n  <li><strong>Lasttest<\/strong>: Mit Tools wie <code>ab<\/code> oder <code>hey<\/code> simuliere ich Last und vergleiche P95\/P99-Latenzen bei unterschiedlichen Cache-Gr\u00f6\u00dfen.<\/li>\n<\/ul>\n\n<p>Parallel dazu lasse ich mir aus PHP die Cache-Belegung anzeigen, zum Beispiel in einem Debug-Endpoint oder per CLI:<\/p>\n\n<pre><code>&lt;?php\n$entries = realpath_cache_get();\n$size    = realpath_cache_size();\nprintf(\"Entries: %d, Used: %d bytes (%.2f MiB)\\n\", count($entries), $size, $size\/1048576);\n<\/code><\/pre>\n\n<p>So erkenne ich, ob die Erh\u00f6hung der <code>realpath_cache_size<\/code> tats\u00e4chlich die Misses und Dateisystem-Calls senkt, statt nur RAM zu binden. Idealerweise steigt die Hitrate, w\u00e4hrend P95-Latenzen merklich fallen.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php_realpath_cache_tech_9823.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>So w\u00e4rme ich den Realpath Cache gezielt an<\/h2>\n\n<p>Weil der Cache pro Worker entsteht, lohnt sich ein <strong>Warm-up<\/strong> nach dem Deploy oder Neustart. Ziel ist, dass die h\u00e4ufigsten Includes fr\u00fch im Cache landen, bevor echte Nutzer-Traffic kommt.<\/p>\n\n<ul>\n  <li><strong>Request-Replays<\/strong>: Ich feuere eine Handvoll typischer URLs (Frontend, Admin, API) nach dem Rollout automatisiert ab.<\/li>\n  <li><strong>CLI-Priming<\/strong>: Ein kurzes Bootstrapping-Script l\u00e4dt zentrale Pfade (Autoloader, Kernel, Konfiguration, Routen).<\/li>\n<\/ul>\n\n<pre><code>&lt;?php\n\/\/ warmup.php\nrequire __DIR__.'\/vendor\/autoload.php';  \/\/ Composer\nrequire __DIR__.'\/config\/bootstrap.php'; \/\/ Projektabh\u00e4ngig\nrequire __DIR__.'\/public\/index.php';     \/\/ Front-Controller (kann kurzen Lauf triggern)\necho sprintf(\"Primed %d entries, used %d bytes\\n\",\n    count(realpath_cache_get()), realpath_cache_size());\n<\/code><\/pre>\n\n<p>Dieser Warm-up trifft zwar nicht jeden realen Request, legt aber die meistgenutzten Pfade ab und verk\u00fcrzt die anf\u00e4ngliche Kaltstart-Phase je Worker sp\u00fcrbar.<\/p>\n\n<h2>Zusammenspiel mit OPcache und Filesystem-Cache<\/h2>\n\n<p>OPcache beschleunigt das Ausf\u00fchren von PHP-Dateien, w\u00e4hrend Realpath den Weg zur Datei verk\u00fcrzt, daher kombiniere ich beide <strong>Techniken<\/strong>. F\u00fcr OPcache-Einstellungen nutze ich bew\u00e4hrte Werte und verweise auf fundierte <a href=\"https:\/\/webhosting.de\/php-opcache-konfiguration-performance-optimierung-cacheboost\/\">OPcache-Optimierung<\/a>, damit Bytecode und Pfade ideal zusammenspielen. Zus\u00e4tzlich profitiert Realpath von einem warmen OS-Cache, der Directory-Lookups und Metadaten schnell liefert. So vermeide ich doppelte Wartezeiten beim Laden und beim Parsen. Wer beide Ebenen koordiniert, holt sp\u00fcrbare Antwortzeitgewinne heraus.<\/p>\n\n<h2>Composer-Autoloading optimal nutzen<\/h2>\n\n<p>Der Composer-Autoloader ist ein Haupttreiber f\u00fcr Pfadaufl\u00f6sungen. Je deterministischer er arbeitet, desto leichter hat es der Realpath Cache.<\/p>\n\n<ul>\n  <li><strong>Classmap optimieren<\/strong>: <code>composer dump-autoload -o<\/code> reduziert Verzeichnis-Scans und wiederholte Lookups.<\/li>\n  <li><strong>Autoload strikt halten<\/strong>: Mit <code>classmap-authoritative<\/code> (Projekt-Setting) vermeide ich unn\u00f6tige Fallbacks, die sonst zus\u00e4tzliche Pfadaufl\u00f6sungen ausl\u00f6sen.<\/li>\n  <li><strong>Struktur ordnen<\/strong>: Flache, konsistente Ordnerhierarchien und wenige Sonderf\u00e4lle (z. B. modul- oder mandanten\u00fcbergreifende Includes) stabilisieren die Cache-Last.<\/li>\n<\/ul>\n\n<p>Das Ergebnis: weniger unterschiedliche Pfade pro Request, mehr Wiederverwendung im Realpath Cache und damit geringere IO-Kosten.<\/p>\n\n<h2>FPM und Memory-Budget: was pro Worker realistisch ist<\/h2>\n\n<p>Weil der Realpath Cache pro Prozess existiert, multipliziert sich die konfigurierte Gr\u00f6\u00dfe mit der Zahl der FPM-Worker. Ich plane deshalb ein Budget:<\/p>\n\n<ul>\n  <li><strong>Beispiel<\/strong>: 12 Worker \u00d7 8 MiB = 96 MiB Realpath-Kopf; dazu kommen OPcache, PHP-Heap und Extension-Overhead.<\/li>\n  <li><strong>Ausbalancieren<\/strong>: Hat OPcache reichlich Luft, kann Realpath einige MiB mehr bekommen \u2013 oder umgekehrt.<\/li>\n  <li><strong>Pool-spezifisch<\/strong>: Unterschiedliche FPM-Pools (Front, Admin, API) d\u00fcrfen verschiedene Realpath-Gr\u00f6\u00dfen haben, orientiert am jeweiligen Code-Footprint.<\/li>\n<\/ul>\n\n<p>W\u00e4chst der Code mit jedem Release, w\u00e4chst der <strong>realpath_cache_size<\/strong>-Bedarf typischerweise mit. Ich pr\u00fcfe daher regelm\u00e4\u00dfig die Peak-Belegung unter Last, nicht nur im Leerlauf.<\/p>\n\n<h2>Sonderf\u00e4lle: Symlinks, Container und NFS<\/h2>\n\n<p>Bei Symlink-Rollouts stelle ich eine kurze <strong>TTL<\/strong> ein oder starte FPM nach dem Deploy neu, damit alle Worker frische Pfade laden. In Containern mit ver\u00e4nderlichen Volumes achte ich darauf, dass der Cache nicht veraltete <strong>Ziele<\/strong> ausliefert, indem ich die TTL anpasse. Auf NFS empfiehlt sich zus\u00e4tzlich eine saubere OPcache-Strategie und m\u00f6glichst wenig Verzeichniswechsel. Wenn Pfade zur Laufzeit wechseln, leere ich im Zweifel gezielt mit <code>clearstatcache(true)<\/code> auch den Realpath-Teil. Klare Deploy-Regeln verhindern inkonsistente Zust\u00e4nde quer \u00fcber Worker hinweg.<\/p>\n\n<h2>Typische Stolpersteine und Grenzen<\/h2>\n\n<p>Weil der Cache pro Prozess lebt, muss jeder <strong>Worker<\/strong> zun\u00e4chst einmal Pfade sammeln, bevor der Effekt greift. In Setups mit starken open_basedir-Beschr\u00e4nkungen arbeitet der Realpath Cache eingeschr\u00e4nkt, daher ber\u00fccksichtige ich diese <strong>Grenzen<\/strong> bei der Planung. Zu kleine Caches f\u00fchren zu Thrashing, zu gro\u00dfe Caches verschwenden RAM \u2013 ich suche die Spitze der Kurve mit Messungen. Au\u00dferdem beachte ich, dass Realpath kein Metadaten- oder Inhalts-Cache ist, sondern ausschlie\u00dflich Pfadaufl\u00f6sungen speichert. Wer falsche Erwartungen hat, \u00fcbersieht Ursachen an anderer Stelle.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php_realpath_cache_4321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Betriebssicherheit: typische Fehlerbilder und schnelle Checks<\/h2>\n\n<p>Einige Symptome deuten klar auf Realpath-Probleme hin \u2013 und lassen sich schnell verifizieren:<\/p>\n\n<ul>\n  <li><strong>Sprunghafte Latenzen nach Deploy<\/strong>: Entweder zu lange TTL bei Symlink-Rotation oder fehlender Warm-up. Abhilfe: kurze TTL, FPM-Restart, anschlie\u00dfendes Priming.<\/li>\n  <li><strong>Viele wiederholte <code>stat()<\/code>-Aufrufe<\/strong>: Mit <code>strace<\/code> sichtbar; oft ist die Cache-Gr\u00f6\u00dfe zu klein oder bestimmte dynamische Pfade verdr\u00e4ngen Hot-Entries.<\/li>\n  <li><strong>Hohe Varianz zwischen Workern<\/strong>: Unterschiedliche Caches pro Prozess. Abhilfe: konsistenter Warm-up und gleichm\u00e4\u00dfige Request-Verteilung.<\/li>\n<\/ul>\n\n<p>Ein schneller Health-Check per PHP gen\u00fcgt h\u00e4ufig:<\/p>\n\n<pre><code>&lt;?php\n$entries = realpath_cache_get();\n$byDir = 0; $byFile = 0;\nforeach ($entries as $e) { $e['is_dir'] ? $byDir++ : $byFile++; }\nprintf(\"Dirs: %d, Files: %d, Used: %.2f MiB\\n\", $byDir, $byFile, realpath_cache_size()\/1048576);\n<\/code><\/pre>\n\n<p>So sehe ich, ob vor allem Verzeichnisse (viele Module, Vendor-Strukturen) oder Dateien (zahlreiche Konfigs\/Klassen) den Cache dominieren \u2013 und passe Struktur oder Gr\u00f6\u00dfe an.<\/p>\n\n<h2>Stat-Cache vs. Realpath-Cache: bewusst unterscheiden<\/h2>\n\n<p>PHP f\u00fchrt neben dem Realpath Cache auch einen <strong>Stat-Cache<\/strong> f\u00fcr Ergebnisse von <code>stat()<\/code> und verwandten Aufrufen. Beide Caches lassen sich mit <code>clearstatcache()<\/code> beeinflussen:<\/p>\n\n<ul>\n  <li><code>clearstatcache()<\/code> leert den Stat-Cache (optional f\u00fcr eine konkrete Datei).<\/li>\n  <li><code>clearstatcache(true)<\/code> leert zus\u00e4tzlich den Realpath Cache.<\/li>\n<\/ul>\n\n<p>In seltenen F\u00e4llen \u2013 etwa bei long-running CLI-Workern mit dynamischen Mounts oder bei Hot-Swaps \u2013 nutze ich einen gezielten <code>clearstatcache(true)<\/code>-Hook nach bekannten \u00c4nderungen. Ansonsten lasse ich die TTL arbeiten und vermeide unn\u00f6tige Invalidierungen.<\/p>\n\n<h2>Praxis-Check f\u00fcr Hosting-Umgebungen<\/h2>\n\n<p>Ich ermittle zuerst die Projektgr\u00f6\u00dfe, also wie viele Dateien ein typischer Request l\u00e4dt, und pr\u00fcfe danach die Auslastung des <strong>Caches<\/strong>. Anschlie\u00dfend w\u00e4hle ich eine realpath_cache_size, die alle h\u00e4ufig genutzten Pfade plus Reserve fasst, und setze eine TTL, die zu Deploy-Rhythmen passt. Danach beobachte ich die Effekte mit Monitoring und Logs und passe Werte behutsam an, statt grob zu erh\u00f6hen. Zus\u00e4tzlich lohnt sich ein Blick auf den OS-Cache, etwa auf die Linux-Einstellung <a href=\"https:\/\/webhosting.de\/vm-vfs-cache-pressure-linux-filesystem-cache-tuning-optimierung\/\">VFS-Cache-Pressure<\/a>, weil Realpath von schnellen Verzeichnis-Lookups profitiert. So schichte ich Verbesserungen, ohne Nebeneffekte zu \u00fcbersehen.<\/p>\n\n<h2>Scope und Konfigurationswege: wo ich welchen Wert setze<\/h2>\n\n<p>Je nach Umgebung pflege ich die Parameter an unterschiedlichen Stellen:<\/p>\n\n<ul>\n  <li><strong>Global<\/strong>: <code>php.ini<\/code> f\u00fcr systemweite Defaults.<\/li>\n  <li><strong>Pro-Pool<\/strong>: In FPM-Pools per <code>php_admin_value[realpath_cache_size]<\/code> und <code>php_admin_value[realpath_cache_ttl]<\/code> gezielt f\u00fcr Frontend\/API unterschiedlich dimensionieren.<\/li>\n  <li><strong>Pro-Verzeichnis<\/strong>: In <code>.user.ini<\/code> (falls erlaubt), sinnvoll in Shared-Hosting-Umgebungen.<\/li>\n<\/ul>\n\n<p>Wichtig: \u00c4nderungen an der <code>php.ini<\/code> und FPM-Pool-Configs erfordern einen Neustart bzw. Reload, damit Worker mit den neuen Werten starten.<\/p>\n\n<h2>CLI, Queue-Worker und Cronjobs: dieselben Regeln, andere Laufzeiten<\/h2>\n\n<p>CLI-Skripte und Queue-Worker profitieren ebenfalls vom Realpath Cache \u2013 allerdings ist die <strong>Lebensdauer<\/strong> oft anders:<\/p>\n\n<ul>\n  <li><strong>Kurzlebige CLI-Jobs<\/strong>: Pro Aufruf entsteht der Cache neu. Hier bringen Warm-up und gro\u00dfe TTL wenig, wichtig ist eher eine ausreichende Gr\u00f6\u00dfe, damit wiederholte Includes im Job selbst cachen.<\/li>\n  <li><strong>Daemons\/Worker<\/strong>: Langlaufende Prozesse (Supervisor, Systemd) bauen einen stabilen Cache auf. Nach einem <em>Code-Reload<\/em> (Deploy) sollte der Prozess neu starten, sonst k\u00f6nnten veraltete Pfade im Cache kleben.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php-serverraum-turbo-4196.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Projektgr\u00f6\u00dfen einsch\u00e4tzen und Speicherwirkung<\/h2>\n\n<p>Eine Anwendung mit 4000 einzigartigen Pfaden und 80 Byte Pfadl\u00e4nge plus 128 Byte Overhead pro Eintrag ben\u00f6tigt grob 832 KB <strong>Speicher<\/strong> im Realpath Cache; mit Reserve plane ich 4 MiB oder mehr. W\u00e4chst die Codebasis durch Plugins oder Module deutlich, skaliere ich linear mit und \u00fcberpr\u00fcfe erneut die <strong>Hits<\/strong> versus Misses. Auf Shared-Hosts beachte ich zus\u00e4tzlich inode-Grenzen, weil zu viele kleine Dateien das Gesamtsystem belasten; dazu hilft mir dieser \u00dcberblick zu <a href=\"https:\/\/webhosting.de\/filesystem-inodes-hosting-grenzen-serverdatei\/\">Inodes-Limits<\/a>. Rechne lieber mit Puffer, als permanent am Limit zu laufen. So spare ich Systemcalls ohne unn\u00f6tigen RAM-Verbrauch.<\/p>\n\n<h2>Kurz und knapp: Mein Tuning-Fahrplan<\/h2>\n\n<p>Ich messe zuerst Dateianzahl pro Request, dann setze ich eine passende <strong>Cachegr\u00f6\u00dfe<\/strong> und eine zur Deploy-Praxis passende <strong>TTL<\/strong>. Anschlie\u00dfend kontrolliere ich mit realpath_cache_get()\/size() die Auslastung, justiere in Stufen nach und kombiniere das Ganze mit OPcache- und OS-Cache-Feinschliff. Bei Symlink-Rollouts halte ich die TTL kurz oder starte FPM neu, in statischen Umgebungen nutze ich lange Lebenszeiten. Ziel bleibt eine hohe Cache-Hitrate ohne RAM-Verschwendung. So ziehe ich aus dem Realpath Cache einen untersch\u00e4tzten Turbo f\u00fcr konsistente PHP-Leistung.<\/p>","protected":false},"excerpt":{"rendered":"<p>Scopri come utilizzare in modo mirato la cache Realpath di PHP per migliorare le prestazioni di PHP e ridurre gli accessi al file system. Focus sulla configurazione e sulle best practice.<\/p>","protected":false},"author":1,"featured_media":20971,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-20978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"133","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"PHP Realpath","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20971","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts\/20978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/comments?post=20978"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/posts\/20978\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/media\/20971"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/media?parent=20978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/categories?post=20978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/it\/wp-json\/wp\/v2\/tags?post=20978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}