1

1.首先安装php开发环境,比如lnmp。

2.安装xhprof

ps:

记住从github上面下载(https://github.com/phacility/xhprof),

不要从pecl.php.net站点下载,可能不支持高版本(比如本人使用的php5.4)。

安装步骤:

1.解压文件 unzip

2.cd extension

3./usr/local/php/bin/phpize

4./configure --with-php-config=/usr/local/php/bin/php-config --enable-xhprof

5.make

6.make install

7.cd /usr/local/php/etc

8.vim php.ini 在其中添加

[xhprof]
extension=xhprof.so
xhprof.output_dir="/www/xhprof/tmp" //注意创建此目录

重启lnmp后,查看phpinfo输出信息。查看到xhprof相关信息即代表成功。

或者命令行输入:

php -m |grep xhprof

如果显示xhprof则表示成功:

** 如果是一键安装包安装的lnmp环境,可以使用以下命令,否则找到自己nginx和php的目录重启 **

重启nginx: nginx -s reload

重启phpfpm: /etc/init.d/php-fpm restart

3.搭建一个站点

将代码放在/www/xhprof目录下,拷贝刚才下载到xhprof安装包中的xhprof_html和xhprof_lib2个目录。

创建测试php文件(见代码xhprof_html/test.php)

4.安装扩展使其支持图形化

  • yum update
  • yum -y install dot*
  • yum install graphviz

5. 修改php.ini配置文件

  • 将disable_functions中proc_open删除。
  • 修改参数:auto_prepend_file =/www/xhprof/xhprof_html/header.php
  • 修改参数:auto_append_file =/www/xhprof/xhprof_html/footer.php
  • 可选修改open_basedir参数:open_basedir=/www/xhprof

ps:

open_basedir: 将 PHP 所能打开的文件限制在指定的目录树

用 open_basedir 指定的限制实际上是前缀,不是目录名。

也就是说“open_basedir = /dir/incl”也会允许访问“/dir/include”和“/dir/incls”,如果它们存在的话。

如果要将访问限制在仅为指定的目录,用斜线结束路径名。例如:“open_basedir = /dir/incl/”。

6. 至此该服务器下所有站点都可以产生xphrof相关信息了。

【header.php】

if (extension_loaded('xhprof')) {
include_once '/www/xhprof/xhprof_lib/utils/xhprof_lib.php';
include_once '/www/xhprof/xhprof_lib/utils/xhprof_runs.php';
xhprof_enable(XHPROF_FLAGS_CPU && XHPROF_FLAGS_MEMORY); //为测试test.php里使用这行
//xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY); //线上可以使用这个
}

ps:

XHPROF_FLAGS_NO_BUILTINS (integer)

使得跳过所有内置(内部)函数。

XHPROF_FLAGS_CPU (integer)

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

XHPROF_FLAGS_MEMORY (integer)

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

【footer.php】

if (extension_loaded('xhprof')) {
$profiler_namespace = 'xhprof_foo';
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);
echo ""."Table View" . "";
echo " ";
echo ""."Photo View" . "";
}

【test.php】

简单的测试代码

//要测试的代码 开始
for($i=0;$i<10000;$i++){
strtoupper(substr(md5(md5(mt_rand())),1,20));
echo $i.'
';
}
//结束测试代码

制作一个自己的xhprof测试平台的更多相关文章

  1. 一个基于集成jenkins的测试平台

    (一)先看测试业务的情况: 有各种各样的任务包括代码构建.部署搭建.单元测试.功能自动化测试(包括许多模块的功能自动化测试,有十几个居多),性能测试.正确性验证:复杂一点的是这些任务在不同的测试阶段中 ...

  2. 用JS制作一个信息管理平台完整版

      前  言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容.   1.JSON的基础知识 ...

  3. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  4. 使用CocosSharp制作一个游戏 - CocosSharp中文教程

    注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...

  5. 打造专属测试平台4-使用Docker部署Django项目

    编写完项目代码后,为了稳定的运行,需要将其部署至服务器.这里我选择了Docker去部署Django后端代码. 首先来看看Runoob对Docker的介绍: Docker 是一个开源的应用容器引擎,基于 ...

  6. 微软官方网站线上兼容测试平台-Browser screenshots

    前端开发时最不想做的就是在不同浏览器.平台和分辨率测试网页显示效果,通常这会浮现许多问题,尤其浏览器版本就可能让显示成效完全不同,也只好尽力维持让每一种设备都能正常浏览网页.修改到完全没有问题必须投入 ...

  7. Optimizely:在线网站A/B测试平台

    Optimizely:在线网站A/B测试平台是一家提供 A/B 测试服务的公司.A/B 测试能够对比不同版本的设计,选取更吸引用户眼球的那一款,从而带来更为优化的个人体验.让网站所有者易于对不同版本的 ...

  8. Testin云测试平台初体验

    这几天偶然接触到了一个叫做Testin的云测试平台,经过一番体验,感觉还是不错的,因为里面提供了大量的测试机型,可以针对Android手机的严重碎片化现象做出比较全面的测试,同时Testin的测试内容 ...

  9. SQL注入测试平台 SQLol -1. 简介与安装

    最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. ...

随机推荐

  1. 利用TKinter模块创建GUI窗口

    # -*- coding: utf-8 -*- from Tkinter import *     root = Tk() # 80x80代表了初始化时主窗口的大小,0,0代表了初始化时窗口所在的位置 ...

  2. 备份一下alias喽

    # 每次grep都显示出行号示出行号 alias grep="grep -n" # grep反向选择并显示行号显示行号 alias vgrep="grep -n -v&q ...

  3. 理解EntityFramework两个核心类型的职责 DbSet和D'bContext

    DbSet与DbContext是多对一的关系DbSet是实体对象的集合,提供了实现CRUD的相应方法DbContext封装与数据库和数据模型相关的功能,依据数据实体状态创建SQL命令,将数据更改保存到 ...

  4. LeetCode Array Easy 27. Remove Element 解题

    Given an array nums and a value val, remove all instances of that value in-place and return the new ...

  5. dubbo-源码阅读之服务订阅

    配置例子 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...

  6. 【Luogu】【关卡2-11】简单数学问题(2017年10月)【还差三道题】

    火星人 麦森数 P1403 [AHOI2005]约数研究 f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和. 解答:有几个1做约数的个数 = n /1; 有几个2做约数的个数 = ...

  7. 安卓8.0真机运行appium1.4遇到的问题:运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装?

    运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装? 这3个apk的目录分别是: D:\P ...

  8. 数据结构(c语言版,严蔚敏)第1章绪论

    第1章严蔚敏

  9. Yii2数据库操作 事务

    Yii2 DAO http://blog.csdn.net/hzqghost/article/details/44116039

  10. 【LeetCode 6】Z 字形变换

    题目链接 [题解] 还想着模拟这个过程.然后发现只有行有用啊!... 那就建个rows大小的字符串数组存每行从左到右的字符就行啦.. 然后就是i从1变到n然后又变回1反复就好了. 最后把1..rows ...