tas2580
Blog über Webentwicklung

HHVM unter Debian

tas2580  

Ich höre ja lieber Heavy Metal wie HipHop, aber heute habe ich mich trotzdem mal ein bisschen mit HipHop beschäftigt. Nein nicht die Musik, sondern HipHop Virtual Machine (HHVM). HipHop wurde von Facebook entwickelt um die Serverlast zu senken, dabei werden PHP Scripte in C++ Code übersetzt und kompiliert. So kann der Server den Code direkt ausführen ohne ihn vorher interpretieren zu müssen, das senkt die CPU Last deutlich und lässt den Server die Webseiten schneller ausliefern.

HHVM installieren

Unter Debian ist HHVM nur in Testing enthalten, wer eine ältere Debian Version einsetzt muss also zu erst das HHVM Repository hinzufügen.

wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add hhvm.gpg.key
echo deb http://dl.hhvm.com/debian jessie main | tee /etc/apt/sources.list.d/hhvm.list
apt-get update

Jetzt kann man HHVM ganz normal installieren.

apt-get install hhvm

Wenn die installation abgeschlossen ist muss man noch dafür sorgen dass HHVM beim Neustart des Betriebssystems mit gestartet wird.

update-rc.d hhvm defaults

HHVM konfigurieren

Wenn die Installation erfolgreich abgeschlossen ist muss man die Konfiguration noch ein wenig anpassen. Dazu öffnet man die /etc/hhvm/server.ini und ersetzt dort die Zeile hhvm.server.port = 9000 mit hhvm.server.file_socket = /var/run/hhvm/sock. Die komplette server.ini sieht dann also so aus:

; php options

pid = /var/run/hhvm/pid

; hhvm specific

;hhvm.server.port = 9000
hhvm.server.file_socket = /var/run/hhvm/sock
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.php7.all = 1

Eine komplette Liste aller Settings gibt es hier.

Danach muss man HHVM noch neustarten damit die Änderung übernommen wird.

/etc/init.d/hhvm restart

Webserver konfigurieren

Damit der Webserver in Zukunft HHVM statt PHP nutzt muss man die Konfiguration ein wenig anpassen. Für Apache und Nginx stellt HHVM ein Script dazu bereit, aber auch andere Webserver lassen sich gut mit HHVM nutzen.

Apache

Unter Apache ist die Anpassung recht einfach da HHVM dafür schon ein Script mit liefert. Man muss zur Konfiguration des Apaches also nur /usr/share/hhvm/install_fastcgi.sh ausführen. Das Script konfiguriert den Apache und startet ihn mit der neuen Konfiguration neu.

Nginx

Unter Nginx muss man zu erst seine /etc/nginx/sites-available/default anpassen. Hier kommentiert man die alte PHP Konfiguration einfach aus.

#location ~ \.php$ {
#       fastcgi_split_path_info ^(.+\.php)(/.+)$;
#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#       # With php5-cgi alone:
#       fastcgi_pass 127.0.0.1:9000;
#       # With php5-fpm:
#       fastcgi_pass unix:/var/run/php5-fpm.sock;
#       fastcgi_index index.php;
#       include fastcgi_params;
#}
Danach muss einmal /usr/share/hhvm/install_fastcgi.sh ausgeführt werden. Das Script konfiguriert Nginx und startet ihn mit der neuen Konfiguration neu.

Caddy

Damit Caddy in Zukunft HHVM statt PHP nutzt muss man seine /etc/caddy/Caddyfile anpassen. Dazu ersetzt man die Zeile fastcgi / /run/php/php7.0-fpm.sock php durch fastcgi / unix:/var/run/hhvm/sock php. Danach muss man Caddy neustarten damit die Änderung übernommen wird.

service caddy restart

HHVM Testen

Wenn die Installation und Konfiguration des Webservers abgeschlossen ist kann man sich eine phpinfo.php erstellen und mit folgendem Inhalt füllen:

<?php
phpinfo
();

Wenn man die Datei im Browser aufruft sollte einem angezeigt werden das man HHVM verwendet.

Das erste Aufrufen der Webseiten dauert nun etwas länger als sonst da HHVM den Code erst übersetzen muss, wenn ein Script aber einmal ausgeführt wurde sollte es in Zukunft deutlich schneller laufen und weniger Speicher verbrauchen. Bei großen Scripten kann es vorkommen das die Seite erst mal gar nicht lädt da HHVM zu lange braucht um alle Scripte zu übersetzen. Hier muss man einfach so lange die Seite neu laden bis sie angezeigt wird.

In meinen Tests habe ich festgestellt, dass nicht alle PHP Funktionen von HHVM unterstützt werden, gerade Module die man übe PECL nachinstalliert hat sollte man testen.


Ähnliche Beiträge


Kommentare

Mittlerweile macht es wohl keinen Sinn mehr, HHVM einzusetzen. Denn Benchmarks zeigen, dass PHP 7.2 meist schneller ist als HHVM:
https://kinsta.com/blog/php-7-hhvm-benchmarks/

Außerdem gibt das HHVM-Projekt die PHP-Unterstützung so langsam auf und konzentriert sich auf Hack. Es wird keine PHP7-Unterstüzung geben und damit sind schon jetzt einige aktuelle PHP-Anwendungen nicht lauffähig.
Um PHP-Anwendungen laufen zu lassen, hat HHVM keine Zukunft.

PHP 7.2 lässt sich unter Debian ganz einfach aus dem Repository von https://deb.sury.org/ installieren. Dort gibt es auch eine PHP 5.6 Version für Debian Stretch, sodass man bequem beides parallel laufen lassen kann (z.B. mit PHP-FPM).


Bitte warten ...

Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha