PHP性能优化
这是暑假报道的第二篇。
如果要调整PHP的性能,必须了解哪个部分成为瓶颈。
本次我将总结使用Xdebug和webgrind进行性能分析的经验。
此外,本文中的图片已经进行了模糊处理,以确保不泄露程序信息。
暂且介绍一下它看起来是什么样子。
-
- 実行された関数名
-
- 呼び出し回数
-
- その関数自身の全体に対する処理時間の割合(%)、または実行時間(msec / usec)
- 実行するのにかかった総時間
現在,我們將為使用做準備。
此文章的執行環境如下所示。
-
- プロファイリングしたい対象サーバ(docker)
centOS
Apache
Xdebug的中文意思是什么?
安装
本文介绍了在包含想要进行配置文件分析的服务器上执行的步骤。
# ここは使いたいPHPのバージョンにあったものを選択してください(https://xdebug.org/download/historical)
curl -OL https://xdebug.org/files/xdebug-2.2.0RC1.tgz
tar -xzf xdebug-2.2.0RC1.tgz
cd xdebug-2.2.0RC1
phpize
./configure --enable-xdebug
make
make install
请记下最后一次执行”make install”时的输出中模块的位置。
例如:/usr/lib64/php/modules/xdebug.so
这样,Xdebug的安装就完成了。
设定和启用
如果不知道php.ini的位置,可以执行以下操作确定。
php --ini
在找到位置之后,我们会开始编辑php.ini文件。
; ファイルの末尾に以下を追加します。
zend_extension="(さっきメモったパス)/xdebug.so"
; プロファイリングを有効化
xdebug.profiler_enable = 1
; プロファイルの結果を吐き出す場所の指定(デフォルトは/tmpなのでなくても良い)
xdebug.profiler_output_dir=/tmp
行为分析
如果做到这一步,让我们重新启动 Web 服务器。
# apacheの例
service httpd restart
使用这个方法,当你查看想进行分析的页面时,我认为在之前指定的结果输出位置将会显示出分析结果。
接下来,为了方便查看这些结果,我希望准备好webgrind。
准备Webgrind
这里列出了安装步骤。
这次,我想使用Docker,与要进行性能分析的目标分开使用。
docker run --rm -v /(ここにプロファイル結果が保存されているパスを指定):/tmp -p 80:80 jokkedk/webgrind:latest
尝试以更易阅读的方式进行展示
如果要在与要分析的目标服务器上运行的情况下使用webgrind,请参考这里的步骤。
假如您访问http://localhost:80/index.php,应该会显示如下的界面。
从左边开始,对右上角功能进行说明。
-
- show:(処理時間がかかった順に)どれほど表示するか(100%にすると、全ての処理が表示されます。)
-
- Auto(newest):表示させるプロファイリング結果、デフォルトは、一番新しいファイル
- percent:表示単位を(percent / milliseconds / microseconds)から選択
-
- 実行された関数名
-
- 呼び出し回数
-
- その関数自身の全体に対する処理時間の割合(%)、または実行時間(msec / usec)
- 実行するのにかかった総時間
这将显示。
在这种情况下,我认为函数名左边有着彩色的圆圈。
经过调查,圆圈的颜色意味如下。
色説明青PHPの標準関数緑自分で定義したクラスメソッドオレンジ手続き型の関数グレーinclude、またはrequire .phpファイルにかかる時間
用这个,我们能更容易地知道哪里的处理花费了时间。
在使用这个的同时,进行相关函数的修正等,似乎可以很好地进行调整!
我参考了一些文章。
-
- パフォーマンスも大事!〜PHPでプロファイリング編〜
-
- WordPress サイトのボトルネックを見つける為の解析ツール紹介|セルティスラボ
-
- jokkedk/webgrind
- xdebug.org