xdebugをuninstall/disableするとsegfault

表題のとおりですが、

# PHP7.4.3(Ubuntu 20.04)にxdebugをインストール
apt install php-xdebug
phpenmod xdebug
systemctl restart apache2

# xdebugを無効にする
phpdismod xdebug
systemctl restart apache2

ApachePHPのページにアクセスするとsegmentation faultになる。

[Thu Dec 16 19:32:08.276046 2021] [core:notice] [pid 421823] AH00051: child pid 421937 exit signal Segmentation fault (11), possible coredump in /etc/apache2

CLIも同じで、gdbで見ると以下のような感じです。

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) where
#0  0x0000000000000000 in ?? ()
#1  0x00005555558793ad in ?? ()
#2  0x000055555587bb33 in execute_ex ()
#3  0x00007fffecd2cf81 in tideways_xhprof_execute_ex (execute_data=<optimized out>)
    at /usr/local/src/php-xhprof-extension/tideways_xhprof.c:72
#4  tideways_xhprof_execute_ex (execute_data=0x7ffff5413020)
    at /usr/local/src/php-xhprof-extension/tideways_xhprof.c:61
#5  0x000055555588324b in zend_execute ()
#6  0x00005555557fa2ec in zend_execute_scripts ()
#7  0x0000555555799fd0 in php_execute_script ()
#8  0x0000555555885382 in ?? ()
#9  0x0000555555661938 in ?? ()
#10 0x00007ffff76460b3 in __libc_start_main (main=0x555555661530, argc=2, argv=0x7fffffffe478,
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe468)
    at ../csu/libc-start.c:308
#11 0x0000555555661ade in _start ()

原因はtidewaysなのかxdebugなのか分かりませんが、とりあえずopcacheのファイルをクリア(全削除)してapacheを再起動すると直ります。おそらくxdebugがある時にhookが入ったopcacheが出来上がる→無効化してもそれが残ってsegfaultになる、みたいな感じではないかと思います。


それはそうと、なぜxdebugをoffにしたのかというと、xdebugのextentionをロードすると、それだけで実行速度が遅くなるからです。

Xdebug 2 vs Xdebug 3 Performance Comparison • PHP.Watch

この記事によると、xdebug2では、xdebugのextensionをロードしているだけで(xdebugをoffにしていたとしても)実行時間が8-9倍になっています。

テストを流す際の時間節約のためにoffにしたのですが、上の記事にあるようにxdebug3では性能低下は非常に小さいようなので、xdebug3を入れるべきなのでしょう。