使用 Xdebug 进行分析
PHP 的扩展名为 Xdebug,可用于帮助分析 PHP 应用程序以及运行时调试。运行探查器时,输出将以二进制格式写入文件 cachegrind
。每个平台上都有应用程序来分析这些文件。
要启用分析,请安装扩展并调整 php.ini 设置。在我们的示例中,我们将根据请求参数可选地运行配置文件。这允许我们将设置保持静态并仅在需要时打开探查器。
// Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
// Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
// The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
// Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
接下来,使用 Web 客户端向你希望分析的应用程序的 URL 发出请求,例如
http://example.com/article/1?XDEBUG_PROFILE=1
在页面处理时,它将写入名称类似于的文件
/tmp/cachegrind.out.12345
请注意,它将为每个执行的 PHP 请求/进程写入一个文件。因此,例如,如果你希望分析表单帖子,将为 GET 请求编写一个配置文件以显示 HTML 表单。需要将 XDEBUG_PROFILE 参数传递给后续的 POST 请求,以分析处理表单的第二个请求。因此,在分析时,有时更容易运行 curl 直接 POST 表单。
一旦编写,配置文件缓存就可以被诸如 KCachegrind 之类的应用程序读取。
http://i.stack.imgur.com/ENtOu.gif
这将显示以下信息:
- 执行的功能
- 调用时间,包括后续函数调用本身
- 每个函数被调用的次数
- 调用图表
- 源代码链接
显然,性能调优对每个应用程序的用例都非常具体。一般来说,寻找:
- 重复调用你不希望看到的相同功能。对于处理和查询数据的函数,这些可能是应用程序缓存的主要机会。
- 运行缓慢的功能。申请大部分时间都在哪里?性能调优的最佳回报是关注那些消耗最多时间的应用程序部分。
注意 :Xdebug,特别是它的分析功能,是非常耗费资源的,并且会降低 PHP 的执行速度。建议不要在生产服务器环境中运行它们。