Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台

Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台_第1张图片
火焰图

推荐阅读

  • Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台
  • 超全的设计模式简介(45种)
  • design-patterns-for-humans 中文版
  • MongoDB 资源、库、工具、应用程序精选列表中文版
  • 有哪些鲜为人知,但是很有意思的网站?
  • 一份攻城狮笔记
  • 每天搜集 Github 上优秀的项目
  • 一些有趣的民间故事
  • 超好用的谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

环境准备

安装之前确保已经正确安装了以下软件

  • PHP
  • Nginx
  • Mongodb

安装 PHP mongodb 扩展

$ sudo pecl install mongodb

PHP 配置文件中添加

[mongodb]
extension=mongodb.so

安装 PHP tideaways 扩展

常规编译安装

$ git clone https://github.com/tideways/php-xhprof-extension.git
$ cd /path/php-xhprof-extension
$ phpize
$ ./configure
$ make
$ sudo make install

PHP 配置文件中添加

[tideways]
extension=tideways_xhprof.so
; 不需要自动加载,在程序中控制就行
tideways.auto_prepend_library=0
; 频率设置为100,在程序调用时可以修改
tideways.sample_rate=100

安装 xhgui-branch(xhgui 的汉化版)

$ git clone https://github.com/laynefyc/xhgui-branch.git
$ cd xhgui-branch
$ php install.php

修改 xhgui-branch 配置文件

 'tideways_xhprof',
    ...
    'save.handler' => 'mongodb',
    'db.host' => 'mongodb://127.0.0.1:27017',
    'db.db' => 'xhprof',
    ...
);

启动 mongodb 并设置 xhgui 索引,命令如下:

$ mongo

> 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 } )

xhgui 本地虚拟主机配置参考

server {
    listen       80;
    server_name  xhgui.test;
    root         /Users/yaozm/Documents/wwwroot/xhgui-branch/webroot;

    # access_log  /usr/local/var/log/nginx/access.log;
    error_log  /usr/local/var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        index  index.php index.html index.htm;
    }
}

针对要分析的站点进行设置,直接在要分析站点的 nginx 配置中增加以下项,然后使配置生效就可以了。

$ fastcgi_param PHP_VALUE "auto_prepend_file=/path/xhgui-branch/external/header.php";

参考配置

server {
    listen       80;
    server_name  laravel.test;
    root         /Users/yaozm/Documents/wwwroot/laravel/public;

    # access_log  /usr/local/var/log/nginx/access.log;
    error_log  /usr/local/var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        index  index.php index.html index.htm;
    }
    # 添加 PHP_VALUE,告诉 PHP 程序在执行前要调用的服务
    fastcgi_param PHP_VALUE "auto_prepend_file=/path/wwwroot/xhgui-branch/external/header.php";
}

或者也可以在修改 PHP 配置文件,告诉 PHP 程序在执行前要调用的服务

; Automatically add files before PHP document.
; http://php.net/auto-prepend-file
auto_prepend_file = "/path/wwwroot/xhgui-branch/external/header.php"
Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台_第2张图片
函数监控
Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台_第3张图片
调用图

参考链接

  • https://github.com/phacility/xhprof
  • https://github.com/perftools/xhgui
  • https://github.com/tideways/php-xhprof-extension
  • https://github.com/laynefyc/xhgui-branch
  • https://blog.it2048.cn/article-tideways-xhgui
  • https://zhuanlan.zhihu.com/p/30832165

你可能感兴趣的:(Tideways、xhprof 和 xhgui 打造 PHP 非侵入式监控平台)