Einleitung
Facebooks JIT-Compiler für PHP „HHVM“ (HipHop Virtual Maschine for PHP) ist seit einiger Zeit in aller Munde. Mit HHVM spart Facebook enorme Server Ressourcen (gegenüber Orginal PHP Integrationen) und beschleunigt die PHP Applikationen erheblich. HHVM ist öffentlich verfügbar und wird stetig weiterentwickelt.
Bis vor kurzem war HHVM allerdings für gängige CMS und PHP Frameworks auf Grund des eingeschränkten Funktionsumfangs nicht verwendbar. Diesen Nachteil hat man mit der eben erschienenen Version 3.0.0 bzw. 3.0.1 behoben.
Ab sofort kann HHVM dank dem fastcgi Support auf gängigen Webservern wie Apache und Nginx problemlos eingesetzt werden. Zusätzlich werden nun, dank dem lang erwarteten mysqli Support, Content Management Systeme wie TYPO3 6.2 LTS unterstützt.
Grund genug, einen Blick auf die Installation von HHVM zu werfen und die Performance zu vergleichen.
Installation
Für die Installation stellt Facebook freundlicherweise vorkonfigurierte Packages für verschiedene Linux Distributionen zur Verfügung. Eine Installationsanleitung findet man auf Github.
Nachfolgend wird die Installation unter Debian Wheezy beschrieben. Für diese Installation wird eine 64Bit Architektur (amd64) und eine laufende Apache 2.2 mpm-worker Umgebung mit fastcgi (libapache2-mod-fastcgi) vorausgesetzt. (Anleitungen diesbezüglich sind im Netz zu 100erten verfügbar)
1 2 3 4 |
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - echo deb http://dl.hhvm.com/debian wheezy main | sudo tee /etc/apt/sources.list.d/hhvm.list sudo apt-get update sudo apt-get install hhvm |
- GPG Key von HHVM auf dem System hinzufügen
- HHVM Repo der lokalen sources.list hinzufügen
- Paketquellen neu einlesen
- hhvm installieren (inkl Abhängigkeiten)
Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
******************************************************************** * HHVM is installed. Here are some more things you might want to do: * * Configure your webserver to use HHVM: * $ sudo /usr/share/hhvm/install_fastcgi.sh * $ sudo /etc/init.d/nginx restart * $ sudo /etc/init.d/apache restart * $ sudo /etc/init.d/hhvm restart * * Run command line scripts with HHVM: * $ hhvm whatever.php * * Use HHVM for /usr/bin/php even if you have php-cli installed: * $ sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60 ******************************************************************** |
Danach wird der mitgelieferte Systemcheck durchgeführt HHVM automatisch konfiguriert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
sudo /usr/share/hhvm/install_fastcgi.sh Checking if Apache is installed Detected Apache installation Looking for custom proxy configuration No custom proxy configuration found Checking for enabled proxy_fcgi.load Not found Checking for enabled fastcgi.load Found, checking for loading directives Detected enabled fastcgi.load configuration, setting up integration Force enabling module hhvm_fastcgi.conf WARNING: Unsupported hhvm_fastcgi, not configuring Restarting apache Apache is running, restarting . ok Finished restarting Finished restarting apache Checking if Nginx is installed Nginx not found |
Nun muss der jeweilige VirtualHost, welcher HHVM verwenden soll, ergänzt werden damit PHP via fastcgi / HHVM verwendet wird. Wichtig:
- /var/www/fastcgi/ (oder alternativer Pfad) muss bestehen mit Schreibrechten für den Webserver
- Es werden keine Sockets verwendet (TCP Verbindung zu HHVM – kann folglich auch auf einem eigenen unabhängigen Server installiert werden)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<IfModule mod_fastcgi.c> Alias /hhvm.fastcgi /var/www/fastcgi/hhvm.fastcgi FastCGIExternalServer /var/www/fastcgi/hhvm.fastcgi -host 127.0.0.1:9000 -pass-header Authorization -idle-timeout 300 <Directory "/var/www/fastcgi"> <Files "hhvm.fastcgi"> Order deny,allow </Files> </Directory> AddHandler hhvm-hack-extension .hh AddHandler hhvm-php-extension .php Action hhvm-hack-extension /hhvm.fastcgi virtual Action hhvm-php-extension /hhvm.fastcgi virtual </IfModule> |
1 2 3 4 5 6 7 8 |
service hhvm start hhvm –version HipHop VM 3.0.1 (rel) Compiler: tags/HHVM-3.0.1-0-g97c0ac06000e060376fdac4a7970e954e77900d6 Repo schema: a1146d49c5ba0d6db903beb3a4ed8a3766fef182 service apache2 restart |
Thats it!
Der Test via phpinfo() im Webroot sollte ausgeben: HipHop
Seitens TYPO3 sind übrigens keine Anpassungen nötig.
Tipps & Tricks
Wer einen aktuellen Überblick über die neuen Features und Bugfixes haben möchte, verwendet am besten die Nightly Builds (nicht produktiv einsetzen) und verfolgt den HHVM Blog.
1 2 3 4 |
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - echo deb http://dl.hhvm.com/debian wheezy main | sudo tee /etc/apt/sources.list.d/hhvm.list sudo apt-get update sudo apt-get install hhvm-nightly |
Für das Debuggen von Segfaults liefert HHVM neu ein Debug Package mit:
1 |
sudo apt-get install hhvm-dbg |
Achtung: das Paket ist wesentlich langsamer, das Paket wesentlich grösser und sollte nur zu Debugzwecken verwendet werden. Entsprechende Logfiles werden unter /tmp/ abgelegt.
Fazit
Da das öffentliche HHVM derzeit noch in den Kinderschuhen steckt (viele Frameworks/CMS/PHP Extensions werden noch nicht zu 100% unterstützt) und rasant weiterentwickelt wird, ist der Produktiveinsatz derzeit nicht zu empfehlen. Es lohnt sich aber auf jeden Fall, die Entwicklung zu verfolgen, wie unser Performance Vergleich aufzeigt.
Vielen Dank für das Tutorial. Verlinke ich gerne innerhalb des deutschsprachigen Hack & HHVM Support Forum fbhack.de
Hallo,
leider ist bei der Code Formatierung das HTML mit in Code gelangt…
Gruß
Hallo Sebastian. Danke für den Hinweis – da ist wohl etwas beim WordPress Update schief gelaufen. Ist nun korrigiert. Beste Grüsse Kevin
I have never heard of HHVM. Is it some kind of alternative to PHP? The process to Typo3 install (https://www.cloudways.com/blog/install-typo3/ ) works differently on PHP. You can simply use composer command to do it.