📁
编程笔记
  • 水行云起
  • 功夫在诗外
    • 程序员必读书单
    • 朝闻道
    • Index
    • 大型网站技术架构
    • 富兰克林自传
    • 笛卡尔
    • 程序员修炼之道
    • 知行合一王阳明
    • 好好学习
    • 硅谷钢铁侠:埃隆·马斯克的冒险人生
    • 人性的弱点
    • 人类简史:从动物到上帝
  • 性能分析
    • 进程管理
    • xhprof
    • linux性能排查
  • 存储
    • MySQL
    • 数据中台
    • 深度好文
    • Redis
    • Memcache
  • 大数据
    • 海量数据处理
    • Kafka
    • [译]Hadoop、Spark和Flink-大数据框架对比
    • 数据分析
    • 深度好文
  • 设计模式
    • [译]构建无bug面向对象软件:契约式设计简介
  • 并发编程
    • [译]使用PHP修改《我的世界》——代码篇
    • 深度好文
  • 数学之美
    • [译]PHP尚不适合机器学习的三个原因
    • 分词
    • SVM
    • NLP-文本分类
    • [译]解密数据科学
  • 搬山之术
    • 正则表达式
    • 搜索技巧
    • MAC专区
  • 数据结构和算法
    • 树
    • 动态规划
    • 线性-链表
    • 排序
    • 图
  • 网络通信
    • 深度好文
  • 语言
    • PHP
    • Golang
    • Cpp
  • 操作系统
    • 深度好文
    • 操作系统课程笔记
  • 琅嬛福地
    • 前辈博客
    • 站点
    • 电子书
  • PHP笔记
    • PHP7新特性整理
  • 前端
    • [译]为什么Flutter选择Dart
    • 深度好文
Powered by GitBook
On this page
  • 安装
  • 图形界面
  • 使用方法
  • xhprof 配置选项
  • 倾入性代码(可精确控制想要分析的代码段)
  • php代码入口(针对特定项目)
  • fpm
  • nginx
  • php.ini
  • 访问
  • 使用nginx
  • 使用php内置服务器
  • 性能指标

Was this helpful?

  1. 性能分析

xhprof

安装

git clone https://github.com/longxinH/xhprof.git ./xhprof
cd xhprof/extension/
/path/to/php7/phpize
./configure --with-php-config=/path/to/php7/bin/php-config --enalbe-xhprof
make && sudo make install

php.ini

[xhprof]
extension=xhprof.so;
xhprof.output_dir=/var/tmp/xhprof

xhprof.output_dir是 xhprof 的输出目录,每次执行 xhprof 的 save_run 方法时都会生成一个 run_id.project_name.xhprof 文件

图形界面

brew install graphviz

使用方法

xhprof 配置选项

  • XHPROF_FLAGS_NO_BUILTINS 跳过所有内置(内部)函数。

  • XHPROF_FLAGS_CPU 输出的性能数据中添加 CPU 数据。

  • XHPROF_FLAGS_MEMORY 输出的性能数据中添加 内存 数据。

倾入性代码(可精确控制想要分析的代码段)

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

// 要检查性能的代码

$xhprof_data = xhprof_disable();
include_once  '/path/to/xhprof/xhprof_lib/utils/xhprof_lib.php';
include_once  '/path/to/xhprof/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');

可将上下两部分抽出来放在两个文件中,如下所示

require_once '/path/to/xhprof/start.php';

// 要检查性能的代码

require_once '/path/to/xhprof/end.php';

php代码入口(针对特定项目)

require_once '/path/to/xhprof/start.php';
register_shutdown_function(function() {
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
    include_once "/path/to/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once "/path/to/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');
});

fpm

php-fpm.d/www.conf 添加:

php_value[auto_prepend_file] = /path/to/xhprof/start.php
php_value[auto_append_file] = /path/to/xhprof/end.php

nginx

或者将上面的代码提出来,放在一个 xhprof.php 文件

location ~ \.php$ {  
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "auto_prepend_file=/path/to/xhprof/xhprof.php";
    include        fastcgi_params;
}

php.ini

auto_prepend_file = /path/to/xhprof/xhprof.php

访问

使用nginx

server {
    listen 80;
    root /path/to/xhprof/xhprof_html;
    server_name your_host;
    location = / {
        index index.php;
    }
    location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

使用php内置服务器

cd /path/to/xhprof/xhprof_html
php -S 127.0.0.1:9000

性能指标

  • funciton name : 函数名

  • calls: 调用次数

  • Incl. Wall Time (microsec): 函数运行时间(包括子函数)

  • IWall%:函数运行时间(包括子函数)占比

  • Excl. Wall Time(microsec):函数运行时间(不包括子函数)

  • EWall%:函数运行时间(不包括子函数)

Previous进程管理Nextlinux性能排查

Last updated 5 years ago

Was this helpful?