工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug、xhprof、New Relic 、OneAPM。使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环境来说是够用了,但如果是线上环境的话,xdebug 消耗较大,配置也不够灵活。相比 Xdebug ,xhprof 性能消耗较小,但是 xhprof 注入代码后我们还需要实现保存 xhprof 数据以及展示数据的 UI,听起来似乎又是一大堆工作。

很多人都知道,New Relic 和 OneAPM 是两款类似的性能分析工具,通过简单的安装之后,就有现成的图表和分析数据可用。前一段时间尝试过线上使用 New Relic ,估计是因为墙的原因,造成了 php-fpm 进程阻塞,具体表现为 netstatphp-fpm 开启的端口始终不回收,墙内环境使用墙外服务器很难保证服务的稳定性,所以今天主要介绍一下国内这款 OneAPM PHP性能分析产品

PHP Agent 的安装与简易用法

注册账户后, OneAPM 会提供一个 License Key,下载 PHP Agent 之后,执行安装脚本:

1. 解压 Agent 安装包

tar -xzf OneAPM_php_Agent_latest.tar.gz

2.定位至「安装包所在路径」

cd oneapm-php5-linux-install-script

3. 执行安装脚本

sudo ./oneapm-install install --license=BQ4NSVlMX399eAhNWUdfVE790d1

如果提示未找到 PHP 路径或安装失败,执行下面这条一键安装命令:

sudo ./oneapm-install install --php-path=/usr/local/php5/bin --php-ini-file=/usr/local/php5/etc/php.ini --license=BQ4NSVlMX399eAhNWUdfVE790d1

根据服务器 PHP 环境修改上面命令中 PHP 路径、php.ini 路径和授权码,修改后执行这一键安装命令。

等待安装脚本执行。若出现以下信息,则安装成功。

OneAPM is now installed on your system. Congratulations! Restart your web server or servers. Any question join qq group:321095806 or contact http://support.oneapm.com

安装完成之后,重启 Apache 或 php-fpm。然后,稍等片刻,等待 OneAPM 接收 Agent 发送的数据。

PHP 性能追踪及分析

总览

Dashboard 中查看到具体某个时间段整个系统的稳定程度,我们在图上看到了一个异常波峰,时间在早上6点左右,通过列表筛选器移除 WEB External 后看图。其他业务都很正常,执行到最后 PHP 层,平均时间也只用了 10ms 左右。回到上图点击波峰的指示器可以看到具体明细。

应用吞吐量:是指应用程序每分钟被调用的次数(cpm,即 Calls Per Minute),吞吐量可以反映应用系统对于用户请求的响应能力。

响应时间图主要由 4 部分组成:

  • Web 事务:应用中 Web 事务的响 应时间;
  • Database:应用中 SQL 语句的响应时间;
  • WEB External :HTTP 请求第三方服务调用;
  • 后台任务:代表应用中 后台任务的执行时间;

外部服务 WEB External

WEB External 外部服务,是指应用在运行时所调用的其他外部应用提供的服务,通常由第三方通过 API 提供,使调用者可以使用第三方提供的相应服务。

刚才我们在总览页面发现 WEB External 耗时很多,当打开详情时可以明显看到,原来是微信的接口在6点钟抽了。同样该页面还可以监控到第三方服务调用的响应情况。比如 217ms 的 api.hitokoto.us 服务。

SQL 缓慢的监控

OneAPM 数据库功能可以选择数据库类型,包括“All、Database、选择 Database,则展示数据库的相关信息,同时会增加展示“增、 删、改、查”4 类 SQL 语句的响应时间和吞吐量图;Database、MongoDB、Redis、Memcache(d)”5 项。SQL 语句栏可以按照“总响应时间从长到短”、“平均响应时间从长到短”、“吞吐量从高到低”来进行排序。

举例:通过 Web 事务的响应时间占比查看到一个脚本执行时间相对过长,通过下图可以看到数据库查询占了579ms。通过切换到详情页面,可以看到整个脚本的调用过程,最终发现是程序 mysqli.php:88 行执行的查询占用了过长的时间。


以上只是通过 OneAPM 持续检查程序稳定性的一个基本方法。

程序在日常运行中由于受到的访问量不同,很有可能在某个时间点上出现大面积的延迟,比如并发突然增高或访问某一部分接口的比例突然过高,而平时 Apdex 指标却看起来非常漂亮,那么这个时候通过 OneAPM 就很容易发现程序中影响性能的部分,从而继续改进或优化代码。

性能实战:Wordpress 怎么分析性能瓶颈?

起因是这样子的,朋友有个国外的网站(针对外国人),最近网站挂掉了,就帮忙各种修复了。
但是我本地测试了下网页访问非常慢,其实在我给搞之前也一直如此。。

如下图,第一个请求异常的慢。这个是 contact-us 页面的访问,不涉及太多 sql 查询,也没啥图片。
我点了几个页面都是第一个请求异常的慢 (>10s).

内存,各种都正常,MySQL 慢查询也看了没问题。。

后来终于通过 OneAPM 发现,主要原因在于: wp 使用的主题有个会检查主题最新更新事件,判断依据就是,$now-$last 如果大于 6 个小时,就去主题官网检查下更新,而 $last 打印出来居然是 2014 的,主题已经 N 久没更新了。。。所以每次请求都会有检查,好像他们主题网站已经跪掉了,所以每次检查需要 10 秒钟。。。

去掉之后,第一个请求时间瞬间从十几秒二十秒降到 1 秒了,除了首页,其他页面算是秒开了~~

有图为证:

本文已经征得原作者同意,授权在 OneAPM 官方技术博客发布。想阅读更多技术文章,可以点击这里
本文转自 OneAPM 官方博客

如何使用工具进行线上 PHP 性能追踪及分析?的更多相关文章

  1. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

  2. 使用xhprof进行线上PHP性能追踪及分析

    转自: http://avnpc.com/pages/profiler-php-performance-online-by-xhprof

  3. 使用HDFS来进行线上应用的文件存储

    使用HDFS来进行线上应用的文件存储 分类: 云计算2011-07-06 17:57 721人阅读 评论(0) 收藏 举报 hadoop任务集群存储数据分析服务器 这段时间公司使用的hadoop组件h ...

  4. PM2 对 Node 项目进行线上部署与配置

    pm2 是一个带有负载均衡功能的 Node 应用的进程管理器. 1. pm2 主要特点 内建负载均衡(使用Node cluster 集群模块) 保持后台运行 进程守护,系统崩溃后自动重启 启动多进程, ...

  5. PHP 性能追踪及分析工具(XHPROF)

    原文:https://gold.xitu.io/post/5860d23f128fe10069e1cfbf XHPROF:Facebook 开源的轻量级PHP性能分析工具. 它报告函数级别的请求次数和 ...

  6. PHP性能追踪及分析工具xhprof的安装与使用

    对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析. 我们今天就简单介绍一下x ...

  7. 利用jvisualvm使用btrace进行线上调试案例

    用途:btrace主要用于线上调试.通过btrace,可在不改动代码的前提下,方便的发现以下问题: 1.定位性能慢的接口服务: 2.实时打印堆栈信息,定位死锁位置: 3.定位占用大量内存空间的代码块: ...

  8. Apache DolphinScheduler & Doris 将于本周六联合进行线上 Meetup

    01 - 活动介绍 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种 ...

  9. mysql 数据库性能追踪与分析

    http://bbs.linuxtone.org/thread-20601-1-1.html

随机推荐

  1. web前端的十种jquery特效及源码下载

    1.纯CSS3实现自定义Tooltip边框 涂鸦风格 这是一款用纯CSS3打造的自定义Tooltip边框的应用,之前我们讨论过如何用CSS3来实现不同样式的Tooltip,今天的这款Tooltip却可 ...

  2. FTP协议及工作原理详解

    1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...

  3. 利用word2vec对关键词进行聚类

    1.收集预料 自己写个爬虫去收集网页上的数据. 使用别人提供好的数据http://www.sogou.com/labs/dl/ca.html 2.对预料进行去噪和分词 我们需要content其中的值, ...

  4. 《通过脚本查看哪些ip被占用》shell笔记

    改脚本查看哪些ip被占用. #!/bin/bash for i in {1..10}   //赋予i变量1-10 do   //干什么 ping -c1 -w1 192.168.7.$i && ...

  5. 打造简单实用的Thinkphp分页样式(Bootstrap版本)

    先吐槽一下ThinkPHP3.1版的分页样式,虽然看起来也很简单大方,但是所有的页码全是使用简单的数字,之间的空隙比较小,不大容易点,还有那个“前5页”和“后5页”显得有点多余,因为点击当前显示第一页 ...

  6. js设计模式(5)---外观模式

    0.前言 早上好,今天天气不错,估计有35度吧,坐在空调室里相当惬意,那么酒足饭饱之后就应该干些正事了. 1. 为什么使用外观模式 外观模式提供了一个高层接口,封装一些复杂操作或繁琐行为,方便调用.门 ...

  7. SqlServer ,storedprocedure操作

    USE [Role] GO /*Create a table*/ IF OBJECT_ID ('dbo.Users', 'U') IS NOT NULL DROP TABLE Users GO CRE ...

  8. fast_recovery_area无剩余空间(ORA-19815)

    一.问题现象 --执行日志切换时,夯住 SQL ('/u01/oradata/oracle/redo04.log') size 50m; SQL> alter system switch log ...

  9. Vim自动补全神器:YouCompleteMe

    第一次听说这个插件还是在偶然的情况下看到别人的博客,听说了这个插件的大名.本来打算在实训期间来完成安装的,无奈网实在不给力,也就拖到了回家的时候.在开始准备工作的时候就了解到这个插件不是很容易安装,安 ...

  10. 每日一“酷”之difflib

    介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...