Как определить, включен ли PHP JIT

Каков самый простой способ определить, скомпилирован ли PHP с JIT и включен ли JIT из запущенного скрипта?

3 ответа

Решение

Вы можете запросить настройки opcache напрямую, позвонив opcache_get_status():

opcache_get_status()["jit"]["enabled"];

или выполните поиск в php.ini:

ini_get("opcache.jit")

которое является целым числом (возвращается как строка), где последняя цифра указывает статус JIT:

0 - don't 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

Источник: https://wiki.php.net/rfc/jit

      php -i | grep "opcache"

checking:
opcache.enable => On => On
opcache.enable_cli => On => On
opcache.jit => tracing => tracing

opcache_get_status() не будет работать, если JIT отключен, и вызовет фатальную ошибку.

echo (function_exists('opcache_get_status') 
      && opcache_get_status()['jit']['enabled']) ? 'JIT enabled' : 'JIT disabled';

У нас должны быть следующие настройки для JIT в php.ini файл.

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1 //optional, for CLI interpreter
opcache.jit_buffer_size=32M //default is 0, with value 0 JIT doesn't work
opcache.jit=1235 //optional, default is "tracing" which is equal to 1254
Другие вопросы по тегам