OpenResty 从入门到实战
温铭
OpenResty 软件基金会第一任主席,Apache APISIX 项目 VP
20903 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 52 讲
结束语 (1讲)
OpenResty 从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

38 | [视频]巧用wrk和火焰图,科学定位性能瓶颈

学习心得分享
课件参考
数据指导性能优化
项目演示
火焰图信息解读
OpenResty程序性能测试
巧用wrk和火焰图
性能优化

该思维导图由 AI 生成,仅供参考

00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00
    你好,我是温铭。
    今天是我们专栏中的最后一节视频课了,后面内容仍然以图文形式呈现。老规矩,为了更有针对性地学习,在你进行视频学习之前,我想先问你这么几个问题:
    你测试过 OpenResty 程序的性能吗?如何才能科学地找到性能瓶颈?
    如何看懂火焰图的信息,并与 Lua 代码相对应呢?
    这几个问题,也是今天视频课要解决的核心内容,希望你可以先自己思考一下,并带着问题来学习今天的视频内容。
    同时,我会给出相应的文字介绍,方便你在听完视频内容后,及时总结与复习。下面是今天这节课的文字介绍部分。

    今日核心

    今天的视频课,我会用一个开源的小项目来演示一下,如何通过 wrk 和火焰图来优化代码,这个项目地址为:https://github.com/iresty/lua-performance-demo
    视频中的环境是 Ubuntu 16.04,其中的 systemtap 和 wrk 工具,都是使用 apt-get 来安装的,不推荐你用源码来安装。
    这里的 demo 有几个不同的版本,我会用 wrk 来压测每一个版本的 qps。同时,在压测过程中,我都会使用 stapxx 来生成火焰图,并用火焰图来指导我们去优化哪一个函数和代码块。
    最后的结果是,我们会看到一个性能提升 10 倍以上的版本,当然,这其中的优化方式,都是在专栏前面课程中提到过的。建议你可以 clone 这个 demo 项目,来复现我在视频中的操作,加深对 wrk、火焰图和性能优化的理解。
    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 中文繁体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
      • 阿拉伯语
    • 解释
    • 总结

    本文介绍了如何巧用wrk和火焰图科学定位性能瓶颈。作者通过一个开源的小项目演示了如何通过wrk和火焰图来优化代码,展示了在Ubuntu 16.04环境下使用stapxx生成火焰图,并用火焰图指导优化代码的过程。通过压测不同版本的项目,并使用火焰图定位性能瓶颈,最终实现了10倍以上的性能提升。作者强调性能优化需要科学的数据来指导,不仅包括最终的性能指标,还需要用数据来定位具体的瓶颈。文章提供了课件下载链接,鼓励读者在留言区提问和分享学习心得。整体内容涉及到OpenResty程序性能测试、火焰图的信息解读以及性能优化的科学方法,适合对性能优化感兴趣的读者学习参考。

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《OpenResty 从入门到实战》
    新⼈⾸单¥59
    立即购买
    登录 后留言

    全部留言(6)

    • 最新
    • 精选
    • 许童童
      老师这个案例还是挺不错的,手把手带你用火焰图做性能优化。 过早的优化是万恶这源,还要注意优化和代码可读性间的平衡。

      作者回复: 是的,OpenResty 代码的优化做到极致就容易影响可读性。实际的项目,一般会在上面多做一层封装,把优化的细节隐藏下。

      2019-08-21
      4
    • wusiration
      老师的这个案例,基本上把整个性能分析的流程给讲清楚了,周末搭一下环境尝试性能分析一下

      作者回复: 多动手:)

      2019-08-22
      1
    • Witt
      老师,我哪里操作有问题吗? 报错信息: Found exact match for libluajit: /usr/local/openresty/luajit/lib/libluajit-5.1.so.2.1.0 WARNING: cannot find module /usr/local/openresty/nginx/sbin/nginx debuginfo: No DWARF information found [man warning::debuginfo] WARNING: cannot find module /usr/local/openresty/luajit/lib/libluajit-5.1.so.2.1.0 debuginfo: No DWARF information found [man warning::debuginfo] semantic error: while processing function luajit_G semantic error: type definition 'lua_State' not found in '/usr/local/openresty/luajit/lib/libluajit-5.1.so.2.1.0': operator '@cast' at stapxx-0fF6qb3V/luajit.stp:162:12 source: return @cast(L, "lua_State", "/usr/local/openresty/luajit/lib/libluajit-5.1.so.2.1.0")->glref->ptr32 ^ Pass 2: analysis failed. [man error::pass2] Number of similar warning messages suppressed: 634. Rerun with -v to see them. Tip: /usr/share/doc/systemtap/README.Debian should help you get started. ERROR: No stack counts found 环境: Ubuntu 16.04.6 openresty/1.15.8.2

      作者回复: OpenResty 的 1.15.8 中开启了 LuaJIT64 模式,火焰图的工具一直没有跟着升级,所以存在不兼容的问题。有两个方法可以解决: 1. 使用 OpenResty 1.13 的版本; 2. 自己编译 OpenResty 1.15.8,把LuaJIT 64 模式关闭。

      2019-09-15
    • 小侠
      火焰图很直观
      2021-12-18
    • 北冥Master
      ./samples/lj-lua-stacks.sxx --arg time=5 --skip-badvars -x 2871915 > ~/perf.bt Found exact match for libluajit: /usr/local/openresty/luajit/lib/libluajit-5.1.so.2.1.0 In file included from /usr/share/systemtap/runtime/linux/runtime.h:201:0, from /usr/share/systemtap/runtime/runtime.h:24, from /tmp/stapdiQN45/stap_b7d4c96a12d824bc289ba86f5d42b8c9_43901_src.c:26: /usr/share/systemtap/runtime/linux/access_process_vm.h: In function ‘__access_process_vm_’: /usr/share/systemtap/runtime/linux/access_process_vm.h:24:8: error: implicit declaration of function ‘get_task_mm’ [-Werror=implicit-function-declaration] mm = get_task_mm (tsk); ^~~~~~~~~~~ /usr/share/systemtap/runtime/linux/access_process_vm.h:24:6: error: assignment makes pointer from integer without a cast [-Werror=int-conversion] mm = get_task_mm (tsk); ^ /usr/share/systemtap/runtime/linux/access_process_vm.h:35:29: error: passing argument 1 of ‘get_user_pages’ makes integer from pointer without a cast [-Werror=int-conversion] ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma); ^~~ In file included from ./include/linux/pid_namespace.h:7:0, from ./include/linux/ptrace.h:10, from ./include/linux/ftrace.h:14, from ./include/linux/kprobes.h:42, from /usr/share/systemtap/runtime/linux/runtime.h:21,
      2019-12-04
    • 北冥Master
      我的环境执行lj-lua-stackxx 报错,debian9环境,systemtap应该装什么版本?我装的2.6
      2019-12-04
    收起评论
    显示
    设置
    留言
    6
    收藏
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部