使用phpAnalysis打造PHP应用非侵入式性能分析器
使用phpAnalysis打造PHP应用非侵入式性能分析器,查找PHP性能瓶颈。
什么是phpAnalysis
phpAnalysis是一款轻量级非侵入式PHP应用性能分析器,适用于开发、测试及生产环境部署使用,方便开发及测试工程师诊断性能问题:
- 通过tideways收集PHP程序单步运行过程中所有的函数调用时间及CPU内存消耗等信息
- 信息永久存储到MySQL数据库
- 分析每个请求执行的信息,帮助开发测试人员快速定位性能问题
- 非侵入式,不需修改项目PHP代码
- 被动分析器,对性能的影响最小,同时收集足够的信息用于诊断性能问题
当我们发现生产环境的某个接口执行时间特别长时应该怎么做?
直接登录线上机器单步调试?
打大量的log然后分析?
一般我们可以把分析流程拆分为如下几步操作:
- 分析开发/测试环境下执行是否会慢
- 分析预发/Mirror环境执行是否会慢
- 生产环境分析代码执行慢的原因
1,2,3步骤都需要去分析代码,看哪部分执行时间长。如果人工一行代码去排查,需要消耗大量的开发人员的时间并且定位难度很大,于此,phpAnalysis诞生了 :)
安装
准备
- 依赖的PHP扩展:tideaways, PDO, pdo_mysql, zlib
- PHP版本>= 5.4.0
安装phpAnalysis
下载源代码
- cd /home/www
- git clone https://github.com/dreamans/phpAnalysis.git
- cd phpAnalysis
修改配置文件
- 文件位置:/home/www/phpAnalysis/config/database.php
- 修改数据库链接信息
- 数据库需要自己创建
- 建表语句请见install.sql
- return [
- 'connection' => [
- 'host' => '127.0.0.1', // 数据库主机名
- 'port' => 3306, // 数据库端口号
- 'user' => 'root', // 用户名
- 'pass' => 'root', // 密码
- 'db' => 'phpAnalysis', // 数据库名
- 'tb_prefix' => 'pa_', // 表前缀
- ],
- ];
修改Web Server配置,以Nginx为例
- server {
- listen 8000;
- server_name localhost;
- root /home/www/phpAnalysis/public;
- index index.html;
- 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.ini
- ; 告诉PHP程序在执行前首先调用此文件
- auto_prepend_file = /home/www/phpAnalysis/agent/header.php
- [tideways]
- extension=tideways.so
- ;不需要自动加载,在程序中控制就行
- tideways.auto_prepend_library=0
- ;频率设置为100,在程序调用时能改
- tideways.sample_rate=100
重启php-fpm进程
如果安装顺利,此时访问 http://localhost:8000 能看到效果
预览
- 请求列表
支持按应用实例名称、请求时段、url模糊查询筛选列表
- 请求执行基本信息
- 请求携带的数据
- 调用明细
说明
项目处于开发阶段,权限控制未完成且未做性能优化,请勿在生产环境中部署,感谢支持!
使用phpAnalysis打造PHP应用非侵入式性能分析器的更多相关文章
- 支付宝开源非侵入式 Android 自动化测试工具 Soloπ
Soloπ(SoloPi)是支付宝开源的一个无线化.非侵入式的Android自动化测试工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 本文是SoloPi团队关 ...
- BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)
开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有 ...
- Spring学习(1):侵入式与非侵入式,轻量级与重量级
一. 引言 在阅读spring相关资料,都会提到Spring是非侵入式编程模型,轻量级框架,那么就有必要了解下这些概念. 二. 侵入式与非侵入式 非侵入式:使用一个新的技术不会或者基本不改变原有代码结 ...
- 非侵入式JavaScript(Unobtrusive javaScript)理解
转载自 https://my.oschina.net/leegq/blog/279750 在Web的早期阶段,也就是在jQuery出现以前,在同一个文件中混杂JavaScript代码和HTML标记是非 ...
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
MVC的验证(模型注解和非侵入式脚本的结合使用) @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...
- Spring 侵入式和非侵入式
1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口. 2.如何实现非侵入式 ...
- Spring框架是一种非侵入式的轻量级框架
摘自<Spring框架技术> Spring框架是一种非侵入式的轻量级框架 1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必 ...
- 侵入式&非侵入式
侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如:Struts框架 非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hibernate框架 / Spring ...
- Java非侵入式API接口即文档工具apigcc
一个非侵入的api编译.收集.Rest文档生成工具.工具通过分析代码和注释,获取文档信息,生成RestDoc文档 前言 程序员一直以来都有一个烦恼,只想写代码,不想写文档.代码就表达了我的思想和灵魂. ...
随机推荐
- 第 8 章 容器网络 - 067 - 如何部署 Calico 网络?
0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Cal ...
- haoop fs 命令
Hadoop fs 命令详解 参考文档:https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSy ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 列运算
jQuery EasyUI 数据网格 - 列运算 在本教程中,您将学习如何在可编辑的数据网格(datagrid)中包含一个运算的列.一个运算列通常包含一些从一个或多个其他列运算的值. 首先,创建一个可 ...
- oracle导出大数据
Sqluldr是什么:是一个oracle数据导出小工具. Sqluldr作用介绍:Sqluldr可以快速导出oracle数据库中的数据.该小工具可以将数据库中的数据,导出多种不同的格式(如.txt.. ...
- PAT 1077 Kuchiguse
1077 Kuchiguse (20 分) The Japanese language is notorious for its sentence ending particles. Person ...
- 【转】.Net Core中的Api版本控制
原文链接:API Versioning in .Net Core 作者:Neel Bhatt 简介 Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制 在本 ...
- Vue-- 监听路由变化,数据无法更新?
之前写的Vue项目,有个问题困扰了好久.新闻板块有推荐.精华.最新等几个Tab,设想通过切换Tab,改变路由参数(get/news/:tab)去获取对应数据,然后渲染到页面(用的是同一套组件),问题来 ...
- Mac系统下安装PyCharm
首先,进入 PyCharm 的官网,https://www.jetbrains.com/pycharm/ 有macOS.Windows.Linux三个系统的自由选择,这里我们选macOS,然后down ...
- Eclipse中Server视图加载项目之后项目名后边有带括号的名字
用习惯了eclipse工具,因为某种原因需要修改项目名称.结果选择项目,按“F2”成功修改后,使用tomcat进行web发布时,选择“Add and Remove”,发现名字还是以前那个项目名称.即使 ...
- 架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)
[前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(一)>中小编简单的讲解了Nginx的原理!俗话说:光说不练假把式.接下来,小编就和大家一起来做个小Demo来体会一下N ...