如何设置XHProf的和XHGui为在Ubuntu 14.04性能分析PHP应用程序

介绍

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

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

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

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

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

目前XHProf的如果您正在使用服务器上的PHP 7不支持PHP 7,你可以尝试tideways / PHP的剖析器扩展来代替,该工程作为简易替换为XHProf的。

先决条件

为了遵循本指南,您将需要:

  • 一个Ubuntu 14.04服务器以非root用户sudo的,你可以按照我们设置了初始服务器安装指南
  • 一个运行PHP应用程序的功能PHP Web服务器环境,将进行分析

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

第1步 - 安装服务器依赖关系

如果你没有pecl在服务器上安装,你应该得到它现在安装。 我们需要它来获取两个xhprofmongo PHP扩展设置。

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

sudo apt-get update

接下来,我们将安装peclphp-pear包。 我们还需要php5-dev ,为了通过安装PHP模块peclphp5-mcrypt设立XHGui:

sudo apt-get install php-pear php5-dev php5-mcrypt

要启用mcrypt扩展,运行:

sudo php5enmod mcrypt

最后,我们需要Git来安装XHGui。 如果您的服务器上尚未安装Git,则可以立即安装:

sudo apt-get install git

第2步 - 安装XHProf

现在我们应该得到XHProf的安装和启用。 要通过安装pecl ,运行:

sudo pecl install xhprof-beta

接下来,我们需要激活xhprof扩展。 要同时也保持Ubuntu的/ Debian的标准,我们要创建一个单独的推动这一进程ini配置文件,然后使用命令启用它php5enmod

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

sudo nano /etc/php5/mods-available/xhprof.ini

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

/etc/php5/mods-available/xhprof.ini
extension=xhprof.so

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

sudo php5enmod xhprof

现在唯一剩下要做的就是重新启动Web服务器以应用更改。 LAMP环境(Apache的),你可以这样做有:

sudo service apache2 restart

LEMP环境(Nginx的+ PHP5-FPM),则应该重新启动php5-fpm服务有:

sudo service php5-fpm restart

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

php --ri xhprof

输出应类似于:

Outputxhprof

xhprof => 0.9.2
CPU num => 1

第3步 - 安装MongoDB

下一个步骤是获得的MongoDB和mongo安装在服务器上PHP扩展。 MongoDB被XHGui用于存储通过XHProf的应用程序分析获得的数据。

要安装MongoDB,请运行:

sudo apt-get install mongodb

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

sudo pecl install mongo

安装将在某个时间请求您的输入,以选择是否要为MongoDB启用企业身份验证。 您可以保留默认值(no),只需按Enter键即可继续安装。

现在,我们需要激活mongo PHP扩展,下面我们使用的相同的步骤xhprof扩展。 在创建一个新的配置文件/etc/php5/mods-available/mongo.ini

sudo nano /etc/php5/mods-available/mongo.ini

在文件中包含以下内容:

/etc/php5/mods-available/mongo.ini
extension=mongo.so

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

sudo php5enmod mongo

现在重新启动Web服务器以应用更改。 LAMP环境(Apache的),你可以这样做有:

sudo service apache2 restart

LEMP环境(Nginx的+ PHP5-FPM),则应该重新启动php5-fpm服务有:

sudo service php5-fpm restart

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

php --ri mongo

输出应类似于:

Outputmongo

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索引(可选)

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

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

mongo

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

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客户端,请运行:

exit

第5步 - 安装XHGui

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

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

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

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的依赖项,请执行包含的安装程序:

cd xhgui
php install.php

依赖成功安装之后,我们需要配置一个虚拟主机服务的内容xhgui 接下来的部分介绍如何创建一个虚拟主机xhgui两个LAMP和LEMP环境。

在LAMP上设置XHGui的虚拟主机

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

sudo a2enmod rewrite

下创建一个新的虚拟主机文件/etc/apache2/sites-available

sudo nano /etc/apache2/sites-available/xhgui.conf

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

/etc/apache2/sites-available/xhgui.conf
 <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>

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

如果目前没有可以使用这个虚拟主机的子域,你可以使用一个虚拟的域名,并建立在本地的条目/etc/hosts的文件指向的ServerName ,你设置为服务器的IP地址。 有关如何创建的Apache虚拟主机的更多信息,你可以检查我们如何设置在Ubuntu 14.04的Apache虚拟主机指南。

使用以下命令启用虚拟主机:

sudo a2ensite xhgui

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

sudo service apache2 reload

在LEMP上设置XHGui的虚拟主机

通过创建一个新的虚拟主机文件启动/etc/nginx/sites-available

sudo nano /etc/nginx/sites-available/xhgui

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

/ etc / nginx / sites-available / xhgui
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;
    }
}

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

如果目前没有可以使用这个虚拟主机的子域,你可以使用一个虚拟的域名,并建立在本地的条目/etc/hosts的文件指向server_name ,你设置为服务器的IP地址。 有关如何创建的Nginx虚拟主机的更多信息,你可以检查我们如何设置Nginx的服务器模块在Ubuntu 14.04指南。

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

sudo ln -s /etc/nginx/sites-available/xhgui /etc/nginx/sites-enabled/xhgui

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

sudo service nginx restart

第6步 - 设置XHProf

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

图片01: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 使用您选择的命令行编辑器打开此文件:

sudo nano /etc/apache2/sites-available/000-default.conf

包括现有的内部突出显示的行<VirtualHost>块:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
  ...
  php_admin_value auto_prepend_file "/var/www/xhgui/external/header.php"
  ...
</VirtualHost>

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

sudo service apache2 restart

在Nginx上启用分析

让我们编辑我们想要配置文件的网站的Nginx配置文件。 在这个例子中,我们将启用剖析default此服务器上托管网站,在规定/etc/nginx/sites-available/default 使用您选择的命令行编辑器打开此文件:

sudo nano /etc/nginx/sites-available/default

现在看看该如何定义块.php脚本处理。 在此块中包含突出显示的行:

/ etc / nginx / sites-available / default
 location ~ \.php$ {
   ...
   fastcgi_param PHP_VALUE "auto_prepend_file=/var/www/xhgui/external/header.php";
   ...
}

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

sudo service nginx restart

第7步 - XHGui入门

一切都现在正确设置,但依赖于您的网站通常获得的观点量,可能需要一些时间,第一个分析数据显示在XHGui。 这是由于默认情况下,XHProf将只有100个接收请求中的1个。 您可能需要浏览您的网站,并重新加载几次,之后任何配置文件数据将可用。

XHGui概述

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

图片02:XHGui概述

以下是此概览表中每个字段的快速说明:

  • 方法:在被分析的请求所使用的方法
  • 网址:这是异形的网址
  • 时间:当收集该分析数据的时间
  • 重量(挂钟时间):此请求花了多长时间才能完成
  • CPU:执行此请求由CPU所用的时间
  • 亩(内存使用):申请过程中使用的平均内存
  • PMU(峰值内存使用量):这个请求期间的内存使用高峰

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

图像03:分析数据

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

检查函数调用

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

图像04:XHGui函数调用

比较运行

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

而在寻找一组配置文件数据,到Watch功能部分的右侧,可以看到一个名为按钮对比该运行 单击此按钮将显示为该特定URL执行的所有性能分析运行的列表,您可以在列表中选择其中一个项目来生成比较视图。 只要选择你要比较哪个运行,并单击比较按钮。

这是比较视图的外观:

图05:XHGui比较运行

结论

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

有关XHGui可用的配置选项的详细信息,请查看官方Github上库

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏