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.0, PHP 8.1, PHP 8.2 oder PHP 8.3 Installation (z. B. über die grafische Oberfläche von Plesk)
  • SSH-Root-Zugang


Sofern PHP 8.0, PHP 8.1, PHP 8.2 oder PHP 8.3 noch nicht auf Ihrem creoline Server installiert wurde, finden Sie in dem Artikel PHP 8 Installation eine Schritt-für-Schritt-Anleitung, wie Sie PHP 8 über die grafische Oberfläche von Plesk installieren können.



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ühren Sie folgenden Shell-Befehl via SSH auf Ihrem creoline Server aus:

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

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

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

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


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

# PHP 8.0
systemctl reload plesk-php80-fpm

# PHP 8.1
systemctl reload plesk-php81-fpm

# PHP 8.2
systemctl reload plesk-php82-fpm

# PHP 8.3
systemctl reload plesk-php83-fpm


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:
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 finden Sie 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