Performance-Killer open_basedir

Hallo zusammen,

ich habe bei der Optimierung eines größeren Projekts die Ladezeit von über 5 Sekunden auf ca. 1 Sekunde reduzieren können, einfach nur indem open_basedir deaktiviert wurde!

Das stellte ich fest, als Tideways mir anzeigte dass 50% der Ladezeit (TTFB) nur für File I/O investiert wurde. Hauptsächlich für „is_readable()“, „file_exists“ usw.  Die meisten Abfragen fanden zentral in der Klasse „Enlight_Loader“ statt.
Dort habe ich dann zum Test einen rudimentären Cache und kleine Optimierungen eingebaut und konnte damit die Ladezeit schon auf 2 Sekunden reduzieren.

Im weiteren Verlauf habe ich rausgefunden, dass alle Abfragen wie file_exists() von PHP gecached werden, aber NUR wenn open_basedir inaktiv ist.
Dieser Bug ist dokumentiert: https://bugs.php.net/bug.php?id=77406

In Enlight/Loader fanden insg. 30.000 Abfragen per file_exists(), is_readable() oder is_dir() statt und ohne Cache hat sich das sehr negativ bemerkbar gemacht.
Jetzt lädt die Seite im Schnitt in einer Sekunde!

Ich werde jetzt bei allen Projekten darauf achten, dass „open_basedir“ möglichst inaktiv ist.

Wenn man nicht auf open_basedir verzichten kann, dem sei diese Extension angeraten:

https://github.com/Whissi/realpath_turbo

 

Darf ich fragen wie man dies deaktivieren kann?

Im dazugehörigen Server-panel oder per command line interface;

Bei plesk z.b. bei den PHP-Einstellungen.

Allerdings sollte man unbendingt wissen was man da tut, wenn man am Server rumfummelt: https://php.net/manual/de/ini.core.php

 

Hallo Zusammen,

mmh, wir haben die Einstellung aktiv und eben /usr/bin/optipng:/usr/bin/jpegtran:… im Plesk eingetragen,

also die ganzen Optimierer, ohne die zumindest bei uns beim Import keine Bilder optimiert werden.

Müßte man dann wohl immer nachträglich per Console machen, nehme ich mal an, was ziemlich blöd ist.

Ist das aber wirklich so? Wir sind zwar nicht online mit dem Shop, aber Performance-Unterschiede

habe ich keine bemerkt, nachdem ich die eingetragen haben, werde aber mal die Zeiten messen.

Abgesehen davon wäre bei uns die Voreinstellung bei Aixpro {WEBSPACEROOT}{/}{:}{TMP}{/},

somit ist open_basedir im Standard bei Aixpro ja immer aktiv, wenn ich das richtig sehe.

Irgendwie alles sehr unschön bei PHP… :frowning:

Viele Grüße,

Werner.

Ich betreue ein System, das auch deutlich langsamer war, als alle anderen Systeme, die ich so kenne. Die Ladezeiten waren unterirdisch. Auch hier hat die Abschaltung von open_basedir einen enormen Geschwindigkeitsboost gebracht. Allerdings kenne ich etliche Systeme, die trotz open_basedir sehr schnell sind. Ich glaube, dass die Abschaltung nur dort ein Muss ist, wo die Performance deutlich schlechter ist, als sie eigentlich sein sollte. 

Same here, @igalvezgil‍ DANKE!!! 

Die Performance war bei einem HighTraffic-Shop mit aktiviertem open_basedir mehr.als.unterirdisch (insbesondere nach Update auf SW 5.6). 

open_basedir = none hat im wahrsten Sinne die Rakete gezündet, ich kann es immer noch nicht ganz fassen (tideways von über 5 Sekunden auf ~500ms!)

Mal sehen, was der Hoster dazu meint. Ich verstehe schon den Zusammenhang mit dem realpath cache, aber so ganz klar ist mir nicht, dass das Problem
entweder nicht viel häufiger auftritt (und somit auch bekannter sein müsste!) oder eben eine ganz spezifische Konstellation im Shop dazu führt.
Oder alle Shops mit wirklich Traffic haben das ohnehin  auf “none” stehen?