PHP 8 JIT-Compiler in Plesk aktivieren

In diesem Artikel erklären wir, wie der PHP 8 JIT-Compiler in Plesk Obsidian aktiviert und konfiguriert werden kann.

Voraussetzungen

Folgende Voraussetzungen müssen erfüllt sein, damit der JIT-Compiler aktiviert werden kann:

  • Plesk Obsidian 18.0.33 oder höher
  • Aktivierter OPcache in den Plesk PHP Einstellungen (opcache.enable)
  • PHP 8 Installation (z.B. über die grafische Oberfläche von Plesk)
  • SSH-Root-Zugang

Aktivierung des JIT-Compilers

Für die Aktivierung ist es erforderlich, dass eine zusätzliche PHP Konfigurationsdatei für den PHP 8 FPM Handler auf der Server hinterlegt wird.

Wichtig: Die Laufzeitkonfiguration kann nicht über die PHP-Einstellungen in der grafischen Oberfläche von Plesk aktiviert werden

Führe folgenden SSH-Befehl via SSH auf deinem creoline Server aus:

echo -e 'opcache.jit_buffer_size=100M\nopcache.jit=1255' > /opt/plesk/php/8.0/etc/php.d/opcache_jit.ini

Nachdem die Konfigurationsdatei hinterlegt wurde, muss PHP 8 neu geladen werden, damit die Konfiguration aktiviert wird:

/etc/init.d/plesk-php80-fpm reload

Um zu überprüfen, ob der JIT-Compiler ordnungsgemäß aktiviert wurde, kann über folgendes PHP-Script geprüft werden:

<?php

echo '<pre>';
print_r(opcache_get_status()['jit']);

Beispiel Ausgabe:

Array
(
    [enabled] => 1
    [on] => 1
    [kind] => 5
    [opt_level] => 5
    [opt_flags] => 6
    [buffer_size] => 104857584
    [buffer_free] => 104855104
)


Achtung: \n Damit getestet werden kann, ob der JIT-Compiler aktiv ist, muss die opcache_get_status Funktion in Plesk expliziert aktiviert werden. In der Standard Plesk Installation wird die Funktion in den PHP-Einstellungen unter "disable_functions" aus Sicherheitsgründen deaktiviert.

Konfiguration des JIT-Compilers

Die Konfiguration des JIT-Compilers wird über die opcache.jit Variable definiert. Z. B.: opcache.jit=1255

Jede einzelne Ziffer steht für eine Einstellung eines Konfigurationsparameters. Eine detaillierte Erklärung findest du in dem offiziellen RFC (wiki.php.net).

CPU specific optimization flags (C)

Parameter 1

0 - none
1 - enable AVX instruction generation

Register Allocation (R)

Parameter 2

0 - dont perform register allocation
1 - use local liner-scan register allocator
2 - use global liner-scan register allocator

JIT trigger (T)

Parameter 3

0 - JIT all functions on first script load
1 - JIT function on first execution
2 - Profile on first request and compile hot functions on second request
3 - Profile on the fly and compile hot functions
4 - Compile functions with @jit tag in doc-comments
5 - Tracing JIT

Optimization level (O)

Parameter 4

0 - dont JIT
1 - minimal JIT (call standard VM handlers)
2 - selective VM handler inlining
3 - optimized JIT based on static type inference of individual function
4 - optimized JIT based on static type inference and call tree
5 - optimized JIT based on static type inference and inner procedure analyses

Beispiel-Konfiguration

In unserer Beispiel-Konfiguration verwenden wir folgende Einstellungen:

opcache.jit=1255
Parameter Wert Beschreibung
CPU specific optimization flags 1 enable AVX instruction generation
Register Allocation 2 use global liner-scan register allocator
JIT trigger 5 Tracing JIT
Optimization level 5 optimized JIT based on static type inference and inner procedure analyses