03.04.2014

TYPO3 mit HHVM: Howto (Debian Wheezy, Apache2) *updated*

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...

TYPO3 mit HHVM: Howto (Debian Wheezy, Apache2) *updated*

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)

 

wget -O - dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb 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:

 

********************************************************************
* 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:

 

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)
<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>

 

 

 

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.

 

wget -O - dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb 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:

 

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.