phpの実行開始が遅い場合の対処 という記事にあったのと同じ状況になりました。
(以下引用)
php -v
php -n -v // -nはiniファイルを読まないオプション
この2つの実行で体感で分かるぐらい速度差がある時は特定のPHP拡張の初期化が原因です。liipのPHP v7.1.7とMacOS Sierraで問題があり1秒ぐらいかかってました。
どのiniの読み込みに時間がかかっているのかを確認する
大雑把な方法ですが、この方法で特定ができました。
php.iniの情報から、読み込んでいるiniを確認する
$ php --ini
Configuration File (php.ini) Path: /etc/php/7.2/cli
Loaded Configuration File: /etc/php/7.2/cli/php.ini
Scan for additional .ini files in: /etc/php/7.2/cli/conf.d
Additional .ini files parsed: /etc/php/7.2/cli/conf.d/10-opcache.ini,
/etc/php/7.2/cli/conf.d/10-pdo.ini,
/etc/php/7.2/cli/conf.d/15-xml.ini,
/etc/php/7.2/cli/conf.d/20-bz2.ini,
/etc/php/7.2/cli/conf.d/20-calendar.ini,
...
該当ディレクトリ以下のファイルをすべて標準出力し、'.so'でgrepする
$ cat /etc/php/7.2/cli/conf.d/* | grep '\.so'
zend_extension=opcache.so
extension=pdo.so
extension=xml.so
extension=bz2.so
extension=calendar.so
extension=ctype.so
extension=dom.so
出力をfile等に流し込んで、以下のようなコマンドとして編集して実行する
$ cat /etc/php/7.2/cli/conf.d/* | grep '\.so' > file
$ vim file
こんなコマンド群を作成.以下の記事を参考に.
https://github.com/liip/build-entropy-php/issues/11#issuecomment-59716269
$ cat file
time php -n -d zend_extension=opcache.so -v
time php -n -d extension=pdo.so -v
time php -n -d extension=xml.so -v
コピーしてコンソールにペーストして流し込み
$ time php -n -d zend_extension=opcache.so -v
PHP 7.2.24-0ubuntu0.18.04.7 (cli) (built: Oct 7 2020 15:24:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24-0ubuntu0.18.04.7, Copyright (c) 1999-2018, by Zend Technologies
real 0m0.027s
user 0m0.022s
sys 0m0.006s
$ time php -n -d extension=pdo.so -v
PHP 7.2.24-0ubuntu0.18.04.7 (cli) (built: Oct 7 2020 15:24:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
real 0m0.012s
user 0m0.006s
sys 0m0.006s
$ time php -n -d extension=xml.so -v
PHP 7.2.24-0ubuntu0.18.04.7 (cli) (built: Oct 7 2020 15:24:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
real 0m0.008s
user 0m0.000s
sys 0m0.008s
iniファイル読み込みごとの実行時間が確認できます。時間のかかっている箇所があれば、php.ini
からその箇所の設定をコメントアウト、再実行してみて、結果を確認してみてください。
注意点
-
.so
のファイルによっては、依存関係他よくわからない理由で読み込みが失敗したりするのを確認しています。
これとか
time php -n -d extension=xsl.so -v
PHP Warning: PHP Startup: Unable to load dynamic library 'xsl.so' (tried: /usr/lib/php/20170718/xsl.so (/usr/lib/php/20170718/xsl.so: undefined symbol: dom_node_class_entry), /usr/lib/php/20170718/xsl.so.so (/usr/lib/php/20170718/xsl.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.24-0ubuntu0.18.04.7 (cli) (built: Oct 7 2020 15:24:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
real 0m0.007s
user 0m0.007s
sys 0m0.000s
ファイルは存在するんですけどね。ライブラリ読み込みにおける依存関係によるものかなぁと推測していますが、しっかりとは確認していません。
$ ls -l /usr/lib/php/20170718/xsl.so
-rw-r--r-- 1 root root 30824 10月 8 00:24 /usr/lib/php/20170718/xsl.so