Websites mit VM aus PuPHPet-Vagrant-Konfiguration laden langsam

Als ich mir zum ersten Mal auf puphpet.com eine Vagrant-Konfiguration erzeugt habe, wunderte ich mich sehr. Selbst eine simple PHP-Seite brauchte ewig lange, bis sie geladen war. Wir sprechen hier von 30 Sekunden oder mehr.

Nachdem ich das von anderen VMs nicht kannte, fragte ich mich: woran liegt das?

Xdebug-Konfiguration als Bremse

In der Standard-Konfiguration wird Xdebug mit dem VirtualBox-Image ausgeliefert. Außerdem wird – so sieht man es auf der Website – die Einstellung „Remote Autostart“ über den Wert 0 deaktiviert.

Wie sich dann herausgestellt hat, hat das Skript (bzw. das dahinterliegende Puppet-Manifest) einen Bug. Der Wert wird nämlich nicht richtig gesetzt und so startet die virtuelle Maschine mit aktiviertem Remote-Auto-Debugging. Beim Aufruf einer PHP-Seite versucht Xdebug die Remote-Debug-Session zu starten (in der Standardkonfiguration über den Port 9000). Wenn dort niemand lauscht oder die Firewall den Zugriff verwehrt, kommt es zu langen Ladezeiten.

Lösung: Remote-Auto-Debugging deaktivieren oder Remote-Debugging konfigurieren

Um die Wartezeiten zu vermeiden, hat man zwei Möglichkeiten:

1.) Remote-Auto-Debugging deaktivieren

Wenn man Debugging normalerweise nicht verwendet, kann man das Remote-Auto-Debugging deaktivieren. Dazu sucht man in php.ini nach den Xdebug-Konfigurationseinträgen und setzt den Wert xdebug. remote_autostart auf 0. Damit man trotzdem debuggen kann, left man mit xdebug.idekey einen Key fest. Dieser Key kann als Parameter von dem Browser, der IDE o.ä. übertragen werden, um eine Debugging-Session zu starten.

Wenn man dann doch debuggen möchte, sollte man auf jeden Fall Schritt 2 ausführen, damit (a) die Ladezeiten besser werden und (b) das Debugging überhaupt funktioniert. 😉

2.) Remote-Debugging konfigurieren

Umd über Xdebug Remote-Debugging betreiben zu können, muss die Firewall so konfiguriert werden, dass  die Kommunikation über Port 9000 ermöglicht ist (oder was auch immer man als Port in xdebug.remote_port definiert hat).

Zudem muss man der IDE mitteilen, dass sie nach Debugging-Sessions Ausschau halten soll. In PhpStorm geschieht das über den Menü-Punkt „Run > Start Listen PHP Debug Connections“. Ist das Projekt richtig konfiguriert, kann man nach Lust und Laune Haltepunkte verteilen.

2 Antworten

  1. Frank sagt:

    Ja das war wurde in der Tat anfangs nicht richtig provisioniert. Inzwischen wurde das Problem allerdings behoben und man kann auch alle Xdebug-Einstellungen selbst vornehmen.