前言

所谓非侵入式监控PHP应用性能,就是不修改现有系统代码,而对系统进行监控。这样的系统才能更容易的应用到PHP应用中。这里抛砖引玉,欢迎大家交流。

方案一

如果只是监控每次请求的访问时间。直接检测nginx的日志即可。在nginx的日志中有两个选项。$request_time 和 $upstream_response_time 。 这两个选项记录了响应时间。

1、$request_time 指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。

2、$upstream_response_time 是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。

如果只是监控后端PHP服务的性能,只要更多的关注 $upstream_response_time 这个选项即可。

方案二

如果还想进一步一个PHP请求处理过程中,具体那部分占用时间比较多,就需要借助xhprof了。xhprof可以生成调用关系图,一目了然的可以看出那部分占用时间比较多。如下图(来源于网络):

下面是完整的搭建步骤:

下载安装xhprof

1、下载编译安装的命令如下:$wget https://github.com/phacility/xhprof/archive/master.zip

$unzip ./xhprof_master.zip

$cd ./xhprof_master/extension

$/usr/local/php/bin/phpize

$./configure --with-php-config=/usr/local/php/bin/php-config

$make

$make install

注意,我的php是安装在/usr/local/php目录。根据您的情况,适当修改上面的路径。

2、修改配置文件php.ini$vim /etc/php.ini

底部增加如下内容:

[xhprof]

extension=xhprof.so

xhprof.output_dir=/tmp/xhprof

3、通过下面的命令检测xhprof是否安装成功$/usr/local/php/bin/php -m

如果以上命令输出内容中有xhprof字样,说明xhprof扩展安装成功。

4、拷贝xhprof相关程序到指定目录$mkdir -p /www/sites/xhprof

$cp -r ./xhprof_master/xhprof_html /www/sites/xhprof

$cp -r ./xhprof_master/xhprof_lib /www/sites/xhprof

5、修改nginx配置,以便通过url访问性能数据:在nginx中增加如下代码:server {

listen 8999;

root /opt/sites/xhprof/;

index index.php index.html;

location ~ .*\.php$ {

add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate";

add_header Pragma no-cache;

add_header Access-Control-Allow-Origin *;

add_header Via "1.0 xgs-150";

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

}

}

6、部署性能数据采集程序把xhprof.php文件部署到 /www/sites/xhprof.php 。xhprof.php文件内容如下:<?php

define("XH_LOG_PATH", "/tmp/xhprof.log");

$xh_force_disable = false; //设置性能分析是否启用,设置为true表示关闭。

$max_time = 100; //millisecond

$xh_enable = false;

$start_time = microtime(true);

//这里可以设置需要进行性能分析的url和设置的超时时间。如果指定的url,响应时间超过了设置的超时时间,性能分析数据就会被记录下来。超时时间的单位为毫秒。

$xh_conf["urls"] = array(

//url => max_time

"/i/content/getdetail.json" => 100,

);

function xh_save_data(){

global $start_time, $xh_force_disable, $xh_enable, $max_time;

$end_time = microtime(true);

$cost_time = $end_time - $start_time;

$cost_time *= 1000;

if( $cost_time > $max_time && !$xh_force_disable && $xh_enable ){

include_once "/www/sites/xhprof/xhprof_lib/utils/xhprof_lib.php";

include_once "/www/sites/xhprof/xhprof_lib/utils/xhprof_runs.php";

$xhprof_data = xhprof_disable();

$objXhprofRun = new XHProfRuns_Default();

$run_id = $objXhprofRun->save_run($xhprof_data, "xhprof");

$log_data = "cost_time||$cost_time||run_id||$run_id||request_uri||".$_SERVER["REQUEST_URI"]."\n";

//高并发下 可能会出现错乱情况。建议把 const_time run_id request_uri 写入到数据库

file_put_contents(XH_LOG_PATH, $log_data, FILE_APPEND);

}

}

$xh_request_uri = isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : "";

$arr_xh_cur_url = explode("?", $xh_request_uri);

$xh_cur_url = $arr_xh_cur_url[0];

if( !$xh_force_disable && isset($xh_conf["urls"][$xh_cur_url]) ){

$xh_enable = true;

$max_time = $xh_conf["urls"][$xh_cur_url];

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

register_shutdown_function("xh_save_data");

}else{

$xh_enable = false;

}

?>

把这个代码文件部署到/www/sites/xhprof.php目录后,就可以启用这个文件了。因为我们想对PHP应用代码不进行代码侵入,那么我们就只能通过如下几种方式启用:

* Nginx/PHP-FPM 方式:

fastcgi_param PHP_VALUE "auto_prepend_file=/www/sites/xhprof.php";

* Apache 方式:

php_value auto_prepend_file "/www/sites/xhprof.php"

* php.ini 方式:

auto_prepend_file="/www/sites/xhprof.php"

注意:如果使用了 opcode 缓存,记得要重启你的 php 进程。

7、查看性能分析日志

$tail /tmp/xhprof.log

$cost_time||200||run_id||adadfdsadad||request_uri||/i/content/getcontent.json

上面输出内容中:

cost_time 耗时 200毫秒

run_id 为 adadfdsadad

request_uri 为 /i/content/getcontent.json

8、根据run_id 查看性能分析数据

http://127.0.0.1:8999/xhprof_html/index.php?run=adadfdsadad

查看方式请参考 http://www.cnblogs.com/siqi/p/3790186.html

注意:

1、在正式启用前,一定要确认不会影响正常的数据输出。确认输出内容无异后,再上线。

2、每个url的max_time不要设置的过小。

3、xhprof会影响线上服务的性能,因此最好只在一台机器上进行监控,或者 修改xhprof.php代码,对请求进行随机监控。

非侵入式监控php,非侵入式监控PHP应用性能监控分析相关推荐

  1. visualvm远程监控jvm_别再说你不会 JVM 性能监控和调优了,看完这篇再发言

    常用工具 常用工具主要有 JDK 自带工具与 Arthas 这两种工具. JDK 自带工具 jps 虚拟机进程状况工具 用于查看虚拟机进程状况的工具 命令示例 $ jps15236 Jps14966 ...

  2. linux进程网络监控,linux下的进程、网络、性能监控命令

    Linux下的java虚拟机性能监控与故障处理命令 java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1 ...

  3. 360重磅开源性能监控平台ArgusAPM

    12月16日,在360移动性能开放日上,360手机卫士技术架构负责人卜云涛向我们介绍了360最新开源的性能监控平台ArgusAPM.ArgusAPM是360手机卫士客户端团队继RePlugin之后开源 ...

  4. 360 重磅开源性能监控平台 ArgusAPM

    12 月 16 日,在 360 移动性能开放日上,360 手机卫士技术架构负责人卜云涛向我们介绍了 360 最新开源的性能监控平台 ArgusAPM.ArgusAPM 是 360 手机卫士客户端团队继 ...

  5. 百万 QPS 前端性能监控系统设计与实现

    作者:李振,腾讯云前端性能监控负责人 什么是前端性能监控(RUM) 腾讯云前端性能监控 (RUM) 是一站式前端监控解决方案,用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面 ...

  6. 5. SQL Server数据库性能监控 - 当前请求

    5. SQL Server数据库性能监控 - 当前请求 原文:5. SQL Server数据库性能监控 - 当前请求 对于在线运行的系统,当前数据库性能监控,通常监视以下几点: (1) 是否有阻塞 ( ...

  7. 使用vmstat和iostat命令进行Linux性能监控

    使用vmstat和iostat命令进行Linux性能监控 这是我们正在进行的Linux命令和性能监控系列的一部分.vmstat和iostat两个命令都适用于所有主要的类unix系统(Linux/uni ...

  8. 云图说|云上应用监控神器——应用性能监控APM2.0

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 应用性能管理服务 ...

  9. Jmeter(十八):硬件性能监控指标

    硬件性能监控指标 一.性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况,最大的用户数 2.平均响应时间ART,找出时间较长的业务 3.每秒事务数TPS,服务器的处理能力 性能测试涉及的 ...

  10. 字节跳动应用性能监控帮助客户Java OOM崩溃率下降80%

    一.前言 如何定位和解决 Android App 因为内存不足(Java OOM)引发的线上问题一直是业界的难题.崩溃现场能抓取到的常规信息中并不包括内存分配详情--不了解内存被谁持有,自然也无法追查 ...

最新文章

  1. ASP.NET - Page 的生命周期
  2. python代码检测链表中的环并删除环
  3. Android相机预览方向
  4. Android Hacks:在代码中隐藏软键盘
  5. 基于Flash的ECC纠错算法基本原理及软件C语言算法和硬件Verilog实现(PPT在主页可下载)
  6. java servlet 注册登录,JSP+JavaBean+Servlet实现用户登录与注册
  7. HDU2176 取(m堆)石子游戏【Nim博弈】
  8. Codeforces Round #184 (Div. 2)
  9. java 进度条 百分比_java怎么让进度条带百分数
  10. 在线报刊html代码,数字报纸HTML版本
  11. 联想笔记本连不上手机热点_笔记本电脑连接不上手机热点该怎么解决?
  12. 《道德经》 老子部分阅读笔记
  13. ancestral 箭头符号,英文字典
  14. 路由器的工作原理(计算机网络-网络层)
  15. maven plugins 飘红问题
  16. 21 | 良心中间商:HTTP的代理服务
  17. mysql的填充因子
  18. 熵,条件熵,相对熵,互信息的相关定义及公式推导
  19. 招标过程中如何讲标?
  20. elementui tree控制节点展开与否

热门文章

  1. VC++ MSXML创建XML文件以及对XML文档解析
  2. POJ 2231 Moo Volume(递推、前缀和)
  3. 微信企业号 JS-SDK:上传图片
  4. List-style-type属性失效
  5. 《切入口web教学——使用firebug调试css代码》录制完成
  6. phpstorm 提示请配置PHP解释器的解决办法
  7. 行代码实现数据集可视化、分析与比较
  8. TorchScript的简介以及项目踩坑
  9. 遍历目录寻找指定文件
  10. 管理信息系统 课程设计