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. JPA派生标识符2

    @Entity@Table(name = "adam_importfile")@IdClass(BusinessAdviserFileId.class)public class B ...

  2. Excel解析工具POI

    HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx 对于不同版本的EXCEL文 ...

  3. 【Movie】绿皮书

    今天和室友一起去看了<绿皮书>,一部获得奥斯卡的电影. 起初我是没什么太大期望的,纯粹是因为特价票10块钱,加上身边一个小姐姐的力荐. 看完我觉得,啊不愧是奥斯卡电影啊.推荐. 以下可能会 ...

  4. join(long)方法和sleep(long)方法的比较

    join(long)方法的源代码 public final synchronized void join(long millis) throws InterruptedException { long ...

  5. 《代码大全2》读书笔记 Week8

    这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...

  6. 在并发Java应用程序中检测可见性错误

    了解什么是可见性错误,为什么会发生,以及如何在并发Java应用程序中查找难以捉摸的可见性错误.这些问题你可能也遇到过,当在优锐课学习了一段时间后,我对这些问题有了一定见解,写下这篇文章和大家分享. 检 ...

  7. ubuntu18.4 搭建lamp环境

    一.Apache2 web服务器的安装: 可以先更新一下服务器(可选) 1.sudo apt update             # 获取最新资源包 2.sudo apt upgrade       ...

  8. aarch64 架构 交叉编译 tcpdump

    1. 下载 tcpdump 源码 地址 :http://www.tcpdump.org/    (4.9.2) tcpdump 依赖 libpcap  源码 地址 : http://www.tcpdu ...

  9. BZOJ 1576: [Usaco2009 Jan]安全路经Travel

    日常自闭半小时后看题解,太弱了qwq. 感觉这道题还是比较难的,解法十分巧妙,不容易想到. 首先题目说了起点到每个点的最短路都是唯一的,那么对这个图求最短路图必定是一棵树,而且这棵树是唯一的. 那么我 ...

  10. 当一个页面中有多个form表单并且有重名的元素时,js获取指定form表单中的指定元素

    有时候我们会在一个页面中写了多个form表单,碰巧多个form表单中又有相同名称的元素,而我们又不想改名字,这个时候就能用到 $("#form1 #div1").val() 好玩吧 ...