JIT is incompatible with third party extensions that override zend_execute_ex(). JIT disabled.¶
Description¶
The root cause is that PHP’s JIT has a fundamental incompatibility with extensions that override the engine’s core execution handler zend_execute_ex().
When such an extension is loaded, PHP proactively disables JIT and shows that warning.
This issue goes far beyond just debuggers and coverage tools. Any extension that instruments code, like profilers, APMs, and security modules, can trigger it.
Debuggers & Code Coverage:
xdebug,pcov,xhprof,pinba,suhosinPerformance & APM Tools:
blackfire,newrelic,tideways_xhprof,ddtrace,solarwindsSecurity Modules:
bt_security_notice,bt_safe,imunify360Async & Server Frameworks
swoolePHP Internals & Testing (Zend DTrace, uopz (User Operations for Zend), Zend Observer API (older implementations))
Other APM & Instrumentation:
skywalking
Note: the list above is not exhaustive.
Example¶
Solutions¶
Manage Development vs Production: for extensions that are meant for development, like
xdebugandpcov, the simplest solution is to only load them in your development environment, such as by using differentphp.inifiles.Check for Alternative APIs or Versions: the newer
Zend Observer APIis the most JIT-friendly method for instrumenting code. Modern versions of tools likenewrelicmay support JIT by using this API, so always consult an extension’s latest documentation.Consult Vendor Docs: many vendors provide specific JIT guidance. For instance, specific settings can be used to allow JIT to work with
imunify360.
Changed Behavior¶
This error may appear following an evolution in behavior, in previous versions. See ` <https://php-changed-behaviors.readthedocs.io/en/latest/behavior/.html>`_.