V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kevinwkxw
V2EX  ›  PHP

做了个 Xdebug trace 查看工具

  •  
  •   kevinwkxw · 2019-09-03 16:22:11 +08:00 · 4160 次点击
    这是一个创建于 1907 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近小伙伴们的 PHP 项目遇到性能问题,想要定位性能问题。查了下 PHP 有一种方式是通过 Xdebug 获取程序执行的 trace,通过分析每个函数执行所占用的时间来定位问题所在。但那拿到 trace 文件后发现 Xdebug 打印成信息量相当庞大,虽然 Xdebug 在默认情况下以方便人们阅读的方式来打印 trace 信息的,但要想人工在近 10 万行信息中找到重要数据仍然是相当困难的。

    去 google 是否有相应的工具,找到个xdebug-trace-tree,装上后,发现这个工具竟然不能对树进行折叠,其方便程度还不如 vim。

    继续 google,发现多年以前,有人在Stackoverflow上建议使用 grep 对数据进行过滤,如:

    cat trace.xt | grep -v '                      '
    

    试了下这个方法,效率提高了不少。在服务器上没有 gui 的环境下,可以帮我们一步步缩小问题的范围,但终究不够直观。

    看了下 Xdebug trace 的格式,也不复杂。既然找不到,干脆自己做一个,也方便以后小伙伴们使用。即用了一天写了个XdebugTraceViewer的原型,最近又优化了下功能,基本上可正常使用,分享给需要的同学。由于从未做过 PHP 开发,对 PHP 并不了解,精通 PHP 的同学也可分享下 PHP 性能分析的经验。

    项目地址: https://github.com/kuun/xdebug-trace-viewer

    功能简介:

    • 以树形表格展示函数调用关系
    • 支持统计时间占用
    • 按函数名或文件名进行搜索
    • 支持展示函数执行时的内存使用
    • 支持展示函数调用的详细信息,包括参数与返回值
    • 支持 Windows、Linux、macOS

    截图:

    • 按函数调用顺序排序

    alt text

    • 按时间占用排序

    alt text

    • 显示函数调用的详细信息

    alt text

    • 统计时间占用

    alt text

    5 条回复    2021-04-15 11:04:12 +08:00
    cszchen
        1
    cszchen  
       2019-09-04 01:19:24 +08:00 via Android
    很优秀,可惜会用 xdebug 的本来就不多
    jfcherng
        2
    jfcherng  
       2019-09-04 01:36:05 +08:00
    QCacheGrind
    kevinwkxw
        3
    kevinwkxw  
    OP
       2019-09-04 09:07:28 +08:00
    @cszchen 启用 trace 的设置倒还简单,使用 xdebug 调试确实有点反人类。
    anewg
        4
    anewg  
       2019-09-04 11:15:02 +08:00
    厉害
    Rache1
        5
    Rache1  
       2021-04-15 11:04:12 +08:00
    nb,好用 ,正好需要,star
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2687 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:04 · PVG 08:04 · LAX 16:04 · JFK 19:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.