LoginSignup
1
0

More than 3 years have passed since last update.

phpの実行開始が遅い際、どのiniの読み込みが遅いのかを特定する

Last updated at Posted at 2020-10-15

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0