目前,Microsoft Azure网站不支持远程调试PHP站点。但是,您仍然可以使用XDebug扩展模块排错PHP网站问题。Xdebug是一个开源PHP程序调试器,可以用来跟踪,调试和分析PHP程序的运行状况。

下面具体介绍如何使用XDebug的性能分析功能查找PHP网站的性能瓶颈。在
Azure网站上的PHP — 配置PHP扩展模块中介绍了如何配置XDebug PHP扩展模块。

要启用XDebug的Profiling功能,需要创建一个包含如下内容用的.user.ini文件,并通过FTP上传到/site/wwwroot目录下。

zend_extension = "d:\home\site\wwwroot\bin\php_xdebug-2.2.4-5.5-vc11-nts.dll"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="D:\home\LogFiles"

启用后,如下图所示,在/LogFiles目录下会生成cachegrind.out文件。

xdebug profiler output

 

我们需要使用WinCacheGrind工具分析XDebug的性能文件,WinCacheGrind工具可以从SourceForge网站下载。

如下图所示,我们可以非常直观的看到SlowFunction使用了74秒多的时间。

WincacheGrind

 

双击SlowFunction,可以看到下图所示的具体信息。SlowFunction被调用了mySleep10次,每次花费5~10秒。

WincacheGrind2

 

按需启动XDebug Profiler
在前面的例子中,使用了xdebug.profiler_enabled=1来启用XDebug的profiler功能。该设置应用到整个网站所有的PHP页面,会导致整个网站的性能进一步变慢,在生产环境中可能会导致严重的客户体验问题。
我们可以使用触发器来启用xdebug的profiler功能。当xdebug.profiler_enable_trigger被设置为1,正常的页面访问不受影响。您需要通过使用XDEBUG_PROFILE的GET/ POST参数,或者设置一个名为XDEBUG_PROFILE的一个cookie来触发xdebug的profiler功能。通常,使用xdebug_enable_trigger的时候,我们需要设置xdebug.profiler_enable为0。如果您需要通过触发器来启用xdebug的profiler功能,您需要在网站的根目录下创建一个.user.ini文件包含下面的内容。

zend_extension = ".\bin\php_xdebug-2.2.3-5.5-vc11-nts-x86_64.dll"
xdebug.profiler_enable=0
xdebug.profiler_output_dir="D:\home\Logfiles"
xdebug.profiler_enable_trigger=1

使用改配置,正常的PHP网页访问不受影响。如果您希望打开profiler的功能,在访问页面的时候需要加入?XDEBUG_PROFILE=1来触发profiler功能。比如,此时您可以通过访问HTTP://mysite.azurewebsites.net/slow.php?XDEBUG_PROFILE=1来启用xdebug的pfofiler功能。如果您需要POST请求来重现问题,您可以使用Fillder等工具来构建HTTP请求,或者您可以使用xdebug的浏览器扩展。

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注