前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上设置XHProf和XHGui以分析PHP应用程序

如何在Ubuntu 14.04上设置XHProf和XHGui以分析PHP应用程序

原创
作者头像
大瓜皮
修改2018-10-29 18:28:13
1K0
修改2018-10-29 18:28:13
举报

介绍

在软件工程中,分析是一种用于在运行时分析应用程序的技术,以便识别应用程序中可能存在的瓶颈和性能问题。它是软件优化的重要资源。分析与基准测试不同,因为它在代码级别分析应用程序,而基准测试旨在分析最终用户体验的整体应用程序性能。

一个分析器是将收集有关应用程序的详细信息,以便生成统计信息和内存占用率,频率和函数调用的持续时间,时间有见地的数据来响应请求,除其他事项外软件。

XHProf是一个用于分析PHP应用程序的分析器。XHProf由Facebook创建和开源,作为被动分析器,这意味着它将在后台工作,同时对应用程序的性能影响最小,使其适合在生产环境中使用。

XHGui提供了丰富的界面,可视化通过XHProf收集的数据。

本教程将向您展示如何安装XHProf和XHGui以分析在Ubuntu 14.04上运行的PHP应用程序。

XHProf目前不支持PHP 7.如果您在服务器上使用PHP 7,则可以尝试使用tideways / php-profiler-extension,它可以作为XHProf的替代品。

先决条件

要遵循本指南,您需要:

  • 具有非root sudo权限用户的Ubuntu 14.04服务器,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 运行将要分析的PHP应用程序的功能性PHP Web服务器环境

当您准备好继续前进时,请使用您的sudo帐户登录您的服务器。

步骤1 - 安装服务器依赖项

如果您没有在服务器上安装pecl,则应立即安装它。我们需要它来同时设置xhprofmongo扩展PHP扩展。

首先,使用以下命令更新包管理器缓存:

代码语言:javascript
复制
sudo apt-get update

接下来,我们将安装peclphp-pear包。我们还需要php5-dev从而来通过pecl安装PHP模块,并且通过php5-mcrypt来设置XHGui:

代码语言:javascript
复制
sudo apt-get install php-pear php5-dev php5-mcrypt

要启用mcrypt扩展,请运行:

代码语言:javascript
复制
sudo php5enmod mcrypt

最后,我们需要Git来安装XHGui。如果您的服务器上尚未安装Git,您现在可以使用以下命令安装:

代码语言:javascript
复制
sudo apt-get install git

第2步 - 安装XHProf

现在我们应该安装并启用XHProf。要通过它安装pecl,请运行:

代码语言:javascript
复制
sudo pecl install xhprof-beta

接下来,我们需要激活xhprof扩展。为了在保持Ubuntu / Debian标准的同时促进此过程,我们将创建一个单独的ini配置文件并使用该php5enmod命令启用它。

/etc/php5/mods-available里面创建一个新的配置文件ini

代码语言:javascript
复制
sudo nano /etc/php5/mods-available/xhprof.ini

在此文件中包含以下内容:

代码语言:javascript
复制
extension=xhprof.so

要启用模块配置文件,请运行:

代码语言:javascript
复制
sudo php5enmod xhprof

现在唯一要做的就是重新启动Web服务器以应用更改。在LAMP环境(Apache)上,您可以执行以下操作:

代码语言:javascript
复制
sudo service apache2 restart

LEMP环境(Nginx + PHP5-FPM)上,您应该使用以下命令重新启动php5-fpm服务:

代码语言:javascript
复制
sudo service php5-fpm restart

xhprof扩展现在应该安装并激活。要确认,您可以运行:

代码语言:javascript
复制
php --ri xhprof

输出应该类似于:

代码语言:javascript
复制
xhprof
​
xhprof => 0.9.2
CPU num => 1

第3步 - 安装MongoDB

下一步是在服务器上安装MongoDB和mongoPHP扩展。XHGui使用MongoDB来存储通过XHProf的应用程序分析获得的数据。

要安装MongoDB,请运行:

代码语言:javascript
复制
sudo apt-get install mongodb

要安装MongoDB PHP扩展,请运行:

代码语言:javascript
复制
sudo pecl install mongo

安装将在某个时候询问您的输入,以选择是否要为MongoDB启用企业身份验证。您可以保留默认值(no),然后按Enter继续安装。

现在我们需要激活mongoPHP扩展,遵循我们用于xhprof扩展的相同过程。在以下/etc/php5/mods-available/mongo.ini位置创建新配置文件:

代码语言:javascript
复制
sudo nano /etc/php5/mods-available/mongo.ini

在文件中包含以下内容:

代码语言:javascript
复制
extension=mongo.so

要启用模块配置文件,请运行:

代码语言:javascript
复制
sudo php5enmod mongo

现在重新启动Web服务器以应用更改。在LAMP环境(Apache)上,您可以执行以下操作:

代码语言:javascript
复制
sudo service apache2 restart

LEMP环境(Nginx + PHP5-FPM)上,您应该使用以下命令重新启动php5-fpm服务:

代码语言:javascript
复制
sudo service php5-fpm restart

mongo扩展现在应该安装并激活。要确认,您可以运行:

代码语言:javascript
复制
php --ri mongo

输出应该类似于:

代码语言:javascript
复制
mongo
​
MongoDB Support => enabled
Version => 1.6.12
Streams Support => enabled
SSL Support => enabled
                   Supported Authentication Mechanisms                   
MONGODB-CR => enabled
SCRAM-SHA-1 => enabled
MONGODB-X509 => enabled
GSSAPI (Kerberos) => disabled
PLAIN => disabled
...

第4步 - 设置MongoDB索引(可选)

这是一个可选但推荐的步骤,可以在从MongoDB存储和访问数据时提高XHGui的整体性能。

通过命令行访问MongoDB客户端:

代码语言:javascript
复制
mongo

现在,运行以下命令序列以创建XHGui的索引:

代码语言:javascript
复制
use xhprof
db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
db.results.ensureIndex( { 'profile.main().wt' : -1 } )
db.results.ensureIndex( { 'profile.main().mu' : -1 } )
db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
db.results.ensureIndex( { 'meta.url' : 1 } )

要退出MongoDB客户端,请运行:

代码语言:javascript
复制
exit

第5步 - 安装XHGui

下一步是安装XHGui并将其设置为Web服务器上的虚拟主机。

我们将从Github克隆XHGui存储库开始。因为我们需要将XHGui的内容作为Web服务器上的虚拟主机提供,我们将把克隆的存储库放在/var/www里面。

建议您将XHGui目录设置为常规用户所有。在此示例中,我们将使用sammy作为用户名和组,但您应该使用自己的用户名和组替换这些值。

代码语言:javascript
复制
sudo mkdir -p /var/www/xhgui
sudo chown -R sammy.sammy /var/www/xhgui
cd /var/www
git clone https://github.com/perftools/xhgui.git xhgui

要安装XHGui的依赖项,请执行包含的安装程序:

代码语言:javascript
复制
cd xhgui
php install.php

成功安装依赖项后,我们需要为配置虚拟主机来为xhgui提供内容。接下来的部分将介绍如何在LAMP和LEMP环境中来为xhgui创建虚拟主机。

在LAMP上设置XHGui的虚拟主机

当使用Apache作为Web服务器时,我们首先需要确保mod_rewrite已启用。要启用它,请运行:

代码语言:javascript
复制
sudo a2enmod rewrite

/etc/apache2/sites-available位置创建新的虚拟主机文件:

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/xhgui.conf

将以下内容放在此文件中:

代码语言:javascript
复制
 <VirtualHost *:80>
    DocumentRoot /var/www/xhgui/webroot
    ServerName xhgui.example.com
​
    <Directory "/var/www/xhgui/webroot">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

请注意,文档根目录应指向XHGui主目录中的子目录webroot

如果您当前没有可用于此虚拟主机的子域,则可以使用虚拟域名,并在本地/etc/hosts文件中创建一个ServerName条目,指向您设置为服务器IP的地址。

启用虚拟主机:

代码语言:javascript
复制
sudo a2ensite xhgui

要应用更改,请使用以下命令重新加载Apache:

代码语言:javascript
复制
sudo service apache2 reload

在LEMP上设置XHGui的虚拟主机

首先在/etc/nginx/sites-available上创建一个新的虚拟主机文件:

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/xhgui

将以下内容放在此文件中:

代码语言:javascript
复制
server {
    listen   80;
    server_name xhgui.example.com;
    root   /var/www/xhgui/webroot/;
    index  index.php;

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
    }

    location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
    }
}

请注意,文档根目录应指向XHGui主目录中的子目录webroot

如果您当前没有可用于此虚拟主机的子域,则可以使用虚拟域名,并在本地/etc/hosts文件中创建一个条目,指向server_name您设置为服务器IP地址的条目。

要启用新虚拟主机,请运行:

代码语言:javascript
复制
sudo ln -s /etc/nginx/sites-available/xhgui /etc/nginx/sites-enabled/xhgui

现在,重新启动Nginx以应用更改:

代码语言:javascript
复制
sudo service nginx restart

第6步 - 设置XHProf

此时,您应该能够通过访问在Web服务器配置中指定的服务器名称从浏览器访问XHGui的界面。由于我们尚未开始收集分析数据,您应该看到如下页面:

XHProf扩展已经安装在服务器上,但我们仍然需要为您的应用程序激活分析过程。这通常通过在Web服务器上包含一个PHP指令来完成,该指令会自动为正在执行的所有PHP脚本添加一段代码。重要的是要指出,默认情况下,XHProf将只对100个对应用程序发出的请求中的1个进行分析。

XHGui提供了一个默认的PHP标头,您可以将其添加到脚本中,以便初始化应用程序的分析。如果您按照本教程中的所有步骤操作,则头文件应位于/var/www/xhgui/external/header.php

接下来的部分将向您展示如何自动将此头文件添加到Apache和Nginx环境中的所有PHP脚本。对于此示例,我们将为作为此服务器上的主网站托管的WordPress应用程序启用分析。

在Apache上启用性能分析

让我们编辑我们想要分析的网站的Apache配置文件。在此示例中,我们将为此服务器上托管的主Apache网站启用性能分析,该网站定义于 /etc/apache2/sites-available/000-default.conf。使用您选择的命令行编辑器打开此文件:

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/000-default.conf

在现有<VirtualHost>块中包含突出显示的行:

代码语言:javascript
复制
<VirtualHost *:80>
  ...
  php_admin_value auto_prepend_file "/var/www/xhgui/external/header.php"
  ...
</VirtualHost>

保存文件并退出。重新启动Apache以应用更改:

代码语言:javascript
复制
sudo service apache2 restart

在Nginx上启用性能分析

让我们编辑我们想要分析的网站的Nginx配置文件。在此示例中,我们将为此服务器上托管的default网站启用性能分析,该网站定义于/etc/nginx/sites-available/default。使用您选择的命令行编辑器打开此文件:

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/default

现在查找定义了怎样处理.php脚本的块。在此块中包含突出显示的行:

代码语言:javascript
复制
 location ~ \.php$ {
   ...
   fastcgi_param PHP_VALUE "auto_prepend_file=/var/www/xhgui/external/header.php";
   ...
}

保存文件并退出。重新启动Nginx以应用更改:

代码语言:javascript
复制
sudo service nginx restart

第7步 - XHGui入门

现在一切都已正确设置,但取决于您的网站通常获得的观看量,可能需要一些时间才能在XHGui中显示第一个性能分析数据。这是因为默认情况下XHProf仅会收到100个收到的请求中的1个。在任何配置文件数据可用之前,您可能需要浏览网站并重新加载几次。

XHGui概述

当分析信息可用时,您应该看到如下页面:

您可以在下面找到此概述表中每个字段的快速说明:

  • 方法:分析请求中使用的方法
  • URL:已分析的URL
  • 时间:收集此分析数据的时间
  • wt(挂号时间):此请求需要多长时间才能完成
  • cpu: CPU执行此请求所花费的时间
  • mu(内存使用):此请求期间使用的平均内存
  • pmu(峰值内存使用率):此请求期间内存使用量的峰值

要查看性能分析运行的详细信息,请使用时间字段中的链接。您应该看到这样的页面:

在左侧,您可以看到有关所分析的请求的信息,例如使用的方法,脚本名称和URL,请求参数等。在主页面内容上,您可以识别花费最多时间执行的函数或方法,以及具有更高内存消耗的函数或方法。所有这些信息都与特定的分析运行和请求有关。

检查函数调用

如果向下滚动到页面底部,您将可以访问一个表,其中包含有关在此请求期间执行的所有函数调用的详细信息,包括函数或方法执行的次数,运行时间,多少它使用的内存,以及许多其他有趣的细节。您可以使用表标题按任何这些参数对列表进行排序。您还可以使用右侧的搜索框来搜索特定的函数或方法名称。

比较运行

XHGui最有用的功能之一是比较工具,您可以使用它来比较两个不同的分析运行。这使您能够更改代码并比较多次运行,以查看您的更改是否会为应用程序带来任何性能提升。

在查看一组配置文件数据时,在Watch Functions部分的右侧,您可以看到名为Compare This Run的按钮。单击此按钮将显示为该特定URL执行的所有性能分析运行的列表,您可以在其中选择列表中的一个项目以生成比较视图。只需选择要与之比较的运行,然后单击“ 比较”按钮。

这是比较视图的样子:

结论

分析是一种重要的软件优化技术,可以在代码级为您提供有关应用程序的详细信息。借助XHProf和XHGui等工具,您可以有效地识别代码中有问题的部分,并监控代码更改对应用程序性能的影响。

有关XHGui可用配置选项的更多信息,请查看官方Github存储库

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up XHProf and XHGui for Profiling PHP Applications on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 步骤1 - 安装服务器依赖项
  • 第2步 - 安装XHProf
  • 第3步 - 安装MongoDB
  • 第4步 - 设置MongoDB索引(可选)
  • 第5步 - 安装XHGui
    • 在LAMP上设置XHGui的虚拟主机
      • 在LEMP上设置XHGui的虚拟主机
      • 第6步 - 设置XHProf
        • 在Apache上启用性能分析
          • 在Nginx上启用性能分析
          • 第7步 - XHGui入门
            • XHGui概述
              • 检查函数调用
                • 比较运行
                • 结论
                相关产品与服务
                轻量应用服务器
                轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档