php 函数追踪扩展 phptrace

介绍

phptrace 是一个低开销的用于跟踪、分析 php 运行情况的工具。

它可以跟踪 php 在运行时的函数调用、请求信息、执行流程、并且提供有过滤器、统计信息、当前状态等实用功能。

在任何环境下,它都能很好的定位阻塞的问题以及在高负载下进行 denbug

官方源码:https://github.com/Qihoo360/phptrace。

安装

pecl 方式安装

  1. $ pecl install trace

源码方式安装

  1. $ wget https://pecl.php.net/get/trace-1.0.0.tgz # 下载源码
  2. $ tar -xf trace-1.0.0.tgz # 解压文件
  3. $ cd trace-1.0.0/extension # 进入扩展目录

源码编译

  1. $ whereis php-config # 找到 php-config 的路径
  2. $ phpize
  3. $ ./configure --with-php-config=/usr/bin/php-config # 这里的 --with-php-config 是上一步找到的路径
  4. $ make # 编辑
  5. $ make test # 编译测试
  6. $ make cli # 命令行工具
  7. $ make install-all # 安装 php 扩展,命令行工具到 php 目录

修改 php.ini

php.ini 配置文件中增加以下配置信息。

  1. [phptrace]
  2. extension=trace.so
  3. phptrace.enabled=1

注:修改 php.ini 后,需要手动重启 php-fpm

检查是否生效

  1. root@639ca1f15214:~# php -m | grep trace
  2. trace

实际测试

  1. root@639ca1f15214:/var/www# php -r 'for ($i = 0; $i < 20; $i++) { sleep(5); }' &
  2. [1] 361
  3. root@639ca1f15214:/var/www# phptrace -p $!
  4. process attached
  5. [pid 361] > sleep(5) called at [Command line code:1]
  6. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.001s 5.001s
  7. [pid 361] > sleep(5) called at [Command line code:1]
  8. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.000s 5.000s
  9. [pid 361] > sleep(5) called at [Command line code:1]
  10. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.000s 5.000s
  11. [pid 361] > sleep(5) called at [Command line code:1]
  12. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 4.966s 4.966s
  13. [pid 361] > sleep(5) called at [Command line code:1]
  14. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.000s 5.000s
  15. [pid 361] > sleep(5) called at [Command line code:1]
  16. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.002s 5.002s
  17. [pid 361] > sleep(5) called at [Command line code:1]
  18. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.001s 5.001s
  19. [pid 361] > sleep(5) called at [Command line code:1]
  20. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.002s 5.002s
  21. [pid 361] > sleep(5) called at [Command line code:1]
  22. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.001s 5.001s
  23. [pid 361] > sleep(5) called at [Command line code:1]
  24. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 4.966s 4.966s
  25. [pid 361] > sleep(5) called at [Command line code:1]
  26. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.000s 5.000s
  27. [pid 361] > sleep(5) called at [Command line code:1]
  28. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.003s 5.003s
  29. [pid 361] > sleep(5) called at [Command line code:1]
  30. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.000s 5.000s
  31. [pid 361] > sleep(5) called at [Command line code:1]
  32. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.001s 5.001s
  33. [pid 361] > sleep(5) called at [Command line code:1]
  34. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 5.001s 5.001s
  35. [pid 361] > sleep(5) called at [Command line code:1]
  36. [pid 361] < sleep(5) = 0 called at [Command line code:1] ~ 4.967s 4.967s
  37. [pid 361]> swoole_call_user_shutdown_begin() called at [(null):0]
  38. [pid 361]< swoole_call_user_shutdown_begin() = true called at [(null):0] ~ 0.000s -79.912s
  39. [pid 361]< cli php for ($i = 0; $i < 20; $i++) { sleep(5); }
  40. process detached

php 函数追踪扩展 phptrace的更多相关文章

  1. ES6 - Note3:数组、对象与函数的扩展

    一.数组的扩展,ES6在数组扩展了一些API,以实现更多的功能 1.Array.from:可以将类数组和可遍历的数据结构转换成真正的数组,如下所示 var a = { '0':1,'1':1,leng ...

  2. ES6入门之函数的扩展

    函数js原有的: 属性:arguments[].caller(调用该函数的引用,注意与callee分别开,callee指的是调用函数本身经常在递归中出现).length(形参个数).prototype ...

  3. 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异

    编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的.C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀眼的一 ...

  4. sqlserver 只有函数和扩展存储过程才能从函数内部执行

    一个SQLServer的自定义函数中调用一个自定义的存储过程,执行此函数后发出如下提示:“只有函数和扩展存储过程才能从函数内部执行". 原因:函数只能使用简单的sql语句,逻辑控制语句,复杂 ...

  5. ES6_入门(6)_函数的扩展

    // 2017/7/22 /*ES6函数的扩展*/ //ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; ...

  6. ES6的新特性(7)——函数的扩展

    函数的扩展 函数参数的默认值 基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console ...

  7. ES6学习(二):函数的扩展

    chapter07 函数的扩展 7.1 函数默认值 7.1.1 参数默认值简介 传统做法的弊端(||):如果传入的参数相等于(==)false的话,仍会被设为默认值,需要多加入一个if判断,比较麻烦. ...

  8. ES6学习笔记(6)----函数的扩展

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 函数的扩展 函数的默认值 : ES6可以为函数指定默认值 (1)指定默认值的两种方式 a.函数参 ...

  9. ES6__函数的扩展

    /** * 函数的扩展 * 1 为函数参数指定默认值 * 2 函数的 rest 参数 * 3 箭头函数 */ // ------------------------------------------ ...

随机推荐

  1. ICE 的回调

    使用分布式计算中间件ICE到现在已经有一年多了,在这一年里里面对ICE的理解.应用比较熟悉. 使用ICE写分布式软件,确实是很方便:ICE比较稳定.可靠,调用返回速度低延迟,使用简单,学习曲线不是很陡 ...

  2. libmodbus相关资料整理

    /****************************************************************************** * libmodbus相关资料整理 * ...

  3. CF 739E Gosha is Hunting

    有 $n$ 个 Pokemon,你有 $A$ 个一类精灵球,$B$ 个二类精灵球 分别给出每个 Pokemon 被这两类精灵球捕捉的概率 求抓到 Pokemon 的最优期望个数 $n\leq 2000 ...

  4. 滑雪(经典DP思想)

    个人心得:思想还是不够,开始自己写但是不知道如何记录长度,也不太知道状态的转移,后面看了百度, 发现人人为我我为人人就是一步一步推导, 而递归思想就要求学会记录和找到边界条件,这一题中的话就是用递归, ...

  5. Find The Multiple(DFS)

    Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal repr ...

  6. 在阿里云服务器上安装git

    https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git 有yum的系统执行下列命令(已测试) $ yum in ...

  7. thinkphp <volist>标签中 <if> 判断的写法

    thinkphp <volist>标签中 <if> 判断的写法 <volist name="data" id="vo"> & ...

  8. Swing编程练习。可能这篇会有错误哦

    总结:21岁的思思是华为的初级女java工程师,我等女流怎么办呢? Swing.图形用户界面的编程,panel起了很大作用 package com.da; import java.awt.Color; ...

  9. java代码异常篇

    总结:掌握流.缓冲区类的方法 package com.b; import java.io.BufferedReader; import java.io.File; import java.io.Fil ...

  10. mongo shell命令

    https://docs.mongodb.com/manual/mongo/ 一.MongoDB客户端使用 1.mongo:启动mongo的客户端,和mongo客户端的登录 [root@cmos1 b ...