jns / xhprof-bundle
Symfony JnsXhprofBundle
Requires
- php: >=5.3.2
- lox/xhprof: dev-master@dev
- symfony/dependency-injection: 2.*
- symfony/http-kernel: 2.*
Requires (Dev)
- doctrine/common: ^2.5
- phpspec/prophecy: ~1.1.2
- phpunit/phpunit: ~4.1.3
Suggests
- ext-xhprof: Hierarchical Profiler for PHP
- doctrine/orm: Persist details in a storage via doctrine
- perftools/xhgui: A graphical interface for XHProf data built on MongoDB
This package is not auto-updated.
Last update: 2022-08-06 03:14:01 UTC
README
什么是 XHProf?
XHProf 是一个 PHP 的层次化分析器。它报告函数级别的调用次数以及包括墙时(经过时间)、CPU 时间和内存使用等在内的指标。一个函数的配置文件可以根据调用者或被调用者进行分解。原始数据收集组件是用 C 实现的 PHP Zend 扩展,称为 xhprof。XHProf 有一个简单的基于 HTML 的用户界面(用 PHP 编写)。基于浏览器的 UI 用于查看分析结果,这使得查看结果或与同行分享结果变得容易。还支持调用图图像视图。
查看 官方文档
这个 Symfony 2 Bundle 做了什么?
该包帮助您轻松使用 XHProf 包与 Symfony 2 中的网络调试工具栏。在 Symfony 2.3 及更高版本中,它还可以分析控制台命令。
安装
请确保您已安装 XHProf。如果您在 Mac 上,您可以通过 Macports sudo port install php5-xhprof 简单地安装它
将以下依赖项添加到您的项目 composer.json 文件中
```json
"require": {
"jns/xhprof-bundle": "1.0.*@dev",
"lox/xhprof": "dev-master@dev"
}
```
当然,您必须在您的服务器上安装 xhprof 库。在此阶段,ext-xhprof
不是必需的,因为您的应用程序可以部署到没有 xhprof 的服务器上。
(因此它位于 src/Jns/Bundle/XhprofBundle
)。您可以通过将包作为子模块添加、克隆它或简单地下载源代码来完成此操作。
```bash
$ git submodule add https://github.com/jonaswouters/XhprofBundle.git src/Jns/Bundle/XhprofBundle
```
If this is the first Jns bundle in your Symfony 2 project, you'll
需要将 Jns
命名空间添加到您的自动加载器中。此文件通常位于 app/autoload.php
。
```php
$loader->registerNamespaces(array(
'Jns' => __DIR__.'/../src'
// ...
));
```
初始化包
要初始化包,您需要将其添加到您的内核中。此文件通常位于 app/AppKernel.php
。建议仅在开发环境中加载它。
public function registerBundles() { // ... if (in_array($this->getEnvironment(), array('dev', 'test'))) { // ... $bundles[] = new Jns\Bundle\XhprofBundle\JnsXhprofBundle(); } }
配置
配置 XHProf 位置。
此Bundle已预先配置为macports php5-xhprof默认安装,xhprof网站位于http://xhprof.localhost。要更改您环境的这些设置,您可以在config中定义以下设置来覆盖默认设置。配置通常位于app/config/config_dev.yml
。
jns_xhprof: location_web: http://xhprof.localhost enabled: true
不要忘记将enabled
设置为true
,否则分析器将永远不会被激活。
使用XHGui
XHGui是XHProf PHP扩展的图形用户界面,使用数据库后端和漂亮的图表,使其易于使用和解释。XHProf Bundle支持使用XHGui来显示结果。要使用,安装XHGui,并在配置中添加以下两个设置,通常位于app/config/config.yml
jns_xhprof: entity_manager: <name_of_entity_manager> (defaults to default) entity_class: Acme\FooBundle\Entity\XhprofDetail enable_xhgui: true
创建您的类Acme\FooBundle\Entity\XhprofDetail
<?php namespace Acme\FooBundle\Entity; use Jns\Bundle\XhprofBundle\Entity\XhprofDetail as BaseXhprofDetail; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="details") */ class XhprofDetail extends BaseXhprofDetail { /** * @var integer $id * * @ORM\Column(name="id", type="string", unique=true, length=17, nullable=false) * @ORM\Id */ protected $id; }
如果您只有一个实体管理器定义,则不需要在此处设置。此设置用于您使用单独的XHGui分析数据库(强烈推荐)的情况。
指定样本大小
您可以为分析指定样本大小。这在收集生产环境中真实请求的随机样本时很有用。如果您有大量的请求,您真的不想分析所有的请求。
样本大小设置为分析的概率,例如,如果您将样本大小设置为2,则平均每两个请求就会有一个被分析。当然,在生产环境中,您想将其设置为更高的值。默认值为1,这意味着每个请求都会被分析。
jns_xhprof: sample_size: 2
禁用内置函数
您可以选择跳过所有内置(内部)函数。
jns_xhprof: skip_builtin_functions: true
Web请求分析
仅对带有触发参数的请求启用XHProf
您可以指定一个request_query_argument
参数,以便XHProf仅在具有此参数的请求上激活。这可以在不影响其他请求的情况下分析生产系统。
jns_xhprof: request_query_argument: "__xhprof"
仅对匹配模式的请求启用XHProf
您可以在配置中配置exclude_patterns
参数。XHProf将只为匹配这些模式的请求启用。
jns_xhprof: exclude_patterns: ['/css/', '/js/']
使用禁用Symfony分析器的XHProf
最常见的情况是prod
模式。在默认情况下,Symfony分析器在此模式下被禁用。您可以配置XHProf Bundle以发送包含XHProf Web UI URL的自定义响应头,用于当前令牌。头名称可以通过包配置中的response_header
参数进行配置。空值将完全禁用此头。默认头名称是X-Xhprof-Url
。
控制台命令分析
启用控制台命令分析
您可以将控制台命令的分析设置为on
、off
或option
。
on
:所有命令都将根据sample_size
进行分析;关闭
:没有命令被分析(但Web请求可能被分析);选项
:命令获得一个额外的选项来触发分析。
jns_xhprof: command: "off"
仅使用特定选项启用XHProf
当您将command
设置为选项
时,您可以指定一个选项名称,该名称将在命令上触发分析器运行。该选项将自动在所有命令上可用。
jns_xhprof: command: "option" command_option_name: xhprof
现在您可以使用以下方式分析命令
$ app/console acme:my:command --xhprof
排除某些命令的分析
当使用on
设置时,您可能希望过滤要分析哪些命令。如果名称过滤器匹配,分析器将永远不会触发。
jns_xhprof: command_exclude_patterns: ['acme:', ':debug']