使用 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 的执行速度。建议不要在生产服务器环境中运行它们。