Springe zum Inhalt

Gezähmter HHVM

HHVM ist eine virtuelle Maschine für HipTop, welches PHP-Skripte in Maschinencode übersetzt und anschließend ausführt. Die übersetzten Skripte werden gespeichert und bei wiederholtem Aufrufwerden die bereits übersetzte Programm ausgeführt. Dadurch ergibt sich eine extreme Leistungssteigerung gegenüber der bisher üblichen Methode, PHP-Skripte durch mod_php oder PHP per FastCGI immer wieder neu zu analysieren und auszuführen.

Bei Webservern wird HHVM üblicherweise als Daemon ausgeführt und über FastCGI angesprochen. Entsprechende Konfigurationsdateien für Apache oder auch Nginx werden automatisch installiert.

Leider ist HHVM in den bisher bekannten Standardinstallationen sehr speicherhungrig. Die aus PHP bekannte Einstellung für den maximal von einem Skript zu benutzenden Speicher (memory_limit) wird auf die maximal am Server verfügbare Speichergröße eingestellt und auch vom Prozess reserviert, was schnell zum Auslagern von anderen Prozessen führen kann. Auf dem Webserver gibt es kaum Skripte, die mehrere Gigabyte an Speicher benötigen.

Abhilfe schafft das manuelle Setzen der maximal von einem Skript verwendbaren Speichergröße. Dazu trägt man in /etc/hhvm/php.ini z.B. folgendes ein:

memory_limit = 512M

Damit bläht sich der HHVM-Prozess nicht mehr auf den maximal zur Verfügung stehenden Speicher auf und andere Prozesse auf dem Webserver brauchen nicht mehr ausgelagert zu werden.

Mit entsprechenden Statistik-Tools (hier Munin) ist der Erfolg sofort sichtbar:

HHVM Memory

6 Gedanken zu „Gezähmter HHVM

  1. Tux.

    Was mich zu der Frage führt, warum man dann nicht gleich ein in einer dafür gedachten Sprache programmiert, wenn man sowieso Binärprogramme laufen lassen möchte.

    1. Jens Tautenhahn

      Das ist natürlich möglich, jedoch denke ich, dass der Entwicklungsaufwand für solche Projekte enorm größer als bei Verwendung der etablierten "Websprachen" ist. Die Skriptsprachen bringen im Kern schon jede Menge Funktionalität mit, die sonst erst einmal nachprogrammiert oder bestenfalls dazugelinkt werden müsste. Ausserdem gibt es bereits unzählige bestehende Projekte in PHP, Perl, Python und dergleichen.

        1. Jens Tautenhahn

          Es bleibt nicht bei einem einfachen #include. Versuche doch mal ein einfaches "file_get_contents('http://www.example.com')" (PHP) in z.B. C++ nachzubauen. Die paar Sekunden reichen nicht, in denen ich das hier hingeschrieben habe.

          Bisher habe ich noch kein Projekt gesehen, welches Binärmodule für die verschiedenen Webserver erzeugt oder bereitstellt.

          1. tux.

            Dass PHP "besser" Web kann als C++, ist ja unbestritten; C++ hat dafür andere Stärken. Das war jetzt halt auch nur ein Beispiel.

            "Die verschiedenen Webserver" beherrschen doch eigentlich alle FastCGI (das genau dafür da ist), oder?

Kommentare sind geschlossen.