IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php xdebug 代码跟踪、性能分析 -> 正文阅读

[PHP知识库]php xdebug 代码跟踪、性能分析

1、什么是 xdebug?

Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。(摘自百度百科)

个人认为 xdebug 是 php 最好的调试工具,没有之一。对于一些莫名奇妙的问题,代码的执行轨迹、执行了哪些类、调用了哪些类的方法,性能分析等,使用 xdebug 代码跟踪,通过记录日志可以轻松解决。

2、 如何安装xdebug
?

windows 系统下载对应 php 版本的 xdebug.dll 文件,放在 php 的安装目录 ext 文件夹下。

Linux 系统可以使用 php 的 pecl 安装 ,假设 php 的安装目录是 /usr/local/php ,安装命令:

sudo /usr/local/php/bin/pecl install xdebug

安装完后,在 php.ini 文件添加

zend_extension=xdebug.so

//windows系统
zend_extension=xdebug.dll

如果不知道选择哪个版本,可以使用 xdebug 官方的向导功能
Xdebug: Support — Tailored Installation Instructions

使用 phpinfo() 函数输出到浏览器,然后复制浏览器网页源码,输入到向导页面的输入框中
点击Analyse my phpinfo() output按钮,即可进入结果页面。
结果页面的Instructions下面,就是对应php版本可以下载的Xdebug

3、使用 xdebug 跟踪代码,分析性能

关于 xdebug 的使用,网上铺天盖地的配置 phpstorm、配合浏览器远程调试等教程。似乎 xdebug 用起来那么费事,那么高级,其实大可不必。

最简单也是最直观的调试方式:

xdebug_start_trace();

/* 业务代码     */

xdebug_stop_trace();

设置 php.ini 代码跟踪配置:

zend_extension=/usr/lib64/php/modules/xdebug.so
;代码跟踪日志文件位置,注意要先新建这个traces目录,并设置777
xdebug.trace_output_dir = /tmp
;代码跟踪日志文件格式
xdebug.trace_output_name = trace.%c.%p
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
xdebug.var_display_max_depth = 2
;var_display_max_depth用来设置数组或者对象显示的最大层级。
;默认是3。参见官方文档的说明:Controls how many nested levels of array elements
;and object properties are when variables are displayed
;with either xdebug_var_dump(), xdebug.show_local_vars or through Function Traces.

随后,就可以在配置目录 /tmp 目录下看到类似文件:

trace.287120720.95430.xt

这里截取一段?线上业务生成的日志?示例:

2.1000   12725848      -48                         -> G($start = 'queryStartTime', $end = ???, $dec = ???) /www/wwwroot/publish/core/Lib/Driver/Db/DbMysql.class.php:120
 2.1000   12725992     +144                           -> is_float('') /www/wwwroot/publish/admin/Runtime/~runtime.php:1
                                                      >=> FALSE
 2.1001   12726040      +48                           -> microtime(TRUE) /www/wwwroot/publish/admin/Runtime/~runtime.php:1
                                                      >=> 1639033263.8905
 2.1001   12725992      -48                           -> memory_get_usage() /www/wwwroot/publish/admin/Runtime/~runtime.php:1
                                                      >=> 12725992
                                                    >=> NULL
 2.1002   12725896      -96                         -> mysql_query('SELECT distinct(uid) FROM `pt_lazada_cron_products` WHERE ( status in(4,5) ) ', resource(13) of type (mysql link)) /www/wwwroot/publish/core/Lib/Driver/Db/DbMysql.class.php:131
                                                    >=> resource(36) of type (mysql result)
16.8569   12725968      +72                         -> Db->debug() /www/wwwroot/publish/core/Lib/Driver/Db/DbMysql.class.php:135
16.8569   12726152     +184                           -> C($name = 'DB_SQL_LOG', $value = ???) /www/wwwroot/publish/core/Lib/Core/Db.class.php:252
16.8570   12726248      +96                             -> is_string('DB_SQL_LOG') /www/wwwroot/publish/admin/Runtime/~runtime.php:1
                                                        >=> TRUE

通过日志追踪发现,第 9 行执行耗时?2.1002?秒,到第 11 行代码耗时变成了?16.8569?秒

第 9 行就是性能瓶颈

而第9行执行了一条sql:

SELECT distinct(uid) FROM `pt_lazada_cron_products` WHERE ( status in(4,5) )

所以性能问题就出在这条 sql 上!!!

......

对于接触新的框架,代码执行出现的异常,异常耗时等问题,通过日志追踪可以清晰的发现。

xdebug 还有很多其他玩法,诸如配置 idea 断点调试,配置浏览器远程调试等,有兴趣的可以自己研究。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:36:11  更:2022-01-24 10:36:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:35:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码