当前位置: 首页 > news >正文

lua 程序性能分析工具 Plua 推荐

文章目录

    • plua 是什么
    • 可以测量哪些指标
    • 支持多协程
    • 使用教程
    • 结语
    • 参考

plua 是什么

p 是指 profiler,lua 就是 lua 语言。plua 是一个用于测量 lua 程序性能,并且提供将测量数据转化为火焰图的开源库。

可以测量哪些指标

目前 plua 可以测量函数粒度的 cpu 消耗和函数粒度的内存分布情况。参考下图:
在这里插入图片描述
图中表示一个 lua 程序一个 lua 虚拟机(多协程)执行过程中的完整堆栈情况,每个横条表示堆栈中的一个函数,横条的长度跟该函数耗时成正比。
这里是用采样次数来作为耗时指标看待。
可以看到最下面的入口函数的采样率是100%,就是每次采样(10ms一次),该函数都在调用堆栈中。

支持多协程

官方库是不支持多协程采样的,但是稍微复杂点的 lua 程序都会用到协程,且用的很频繁。所以我稍微修改了下 plua 和 lua 源码支持多协程采样。<地址>
lua 源码修改后,还是打包到 dep/lua-5.3.6.tar.gz 中。一般各个项目会有自己维护的 lua 版本,所以可以解压这个包后,对比 lstate.h 和 lvm.c 两个文件查看具体改动,就几行代码,可以移植到自己项目的 lua 源码中。

使用教程

  • 环境准备
    • go version go1.24.2 linux/amd64
    • 因为我的 go 版本比较新,所以还略微改动了编译脚本和火焰图生成工具的代码。
  • 下载 plua 库
    • git clone https://github.com/tobybo/pLua.git
    • git switch -c develop origin/develop // 切到 develop 分支
  • 安装 go 依赖
    • cd tools // 这是火焰图生成工具的目录
    • go mod init tools
    • go mod tidy
  • 编译 plua 库和火焰图生成工具
    • cd plua
    • ./build.sh
    • 编译成功后,plua 库在 bin/libplua.so
  • 编译适配的 lua
    • cd dep/lua-5.3.6
    • make linux
  • 执行测试脚本
    • cd test
    • ../dep/lua-5.3.6/src/lua test_cpu.lua
    • 执行过后会生成一个 test/call.pro 采样数据文件
  • 生成火焰图
    • cd tools
    • ./show.sh ../test
    • 执行过后会生成一个 call.svg 文件,通过网页浏览器打开该文件即可查看,建议另外用脚本直接上传到一个文件服务器上,通过网页随时查看,也方便共享

结语

  • 官方版本编译脚本是编译成动态库,可以自己调整编译成静态库打包到自己程序中。
  • 还可以考虑支持多线程,多虚拟机,如果业务有需要的话。
  • 还可以考虑支持 jit。因为代码不变的情况下,测量结果是相对一致的,所以用 lua 版本测量也能找到性能热点。

参考

  • https://github.com/esrrhs/pLua
http://www.xdnf.cn/news/1069777.html

相关文章:

  • CTF:PHP 多关卡绕过挑战
  • python 爬虫 下载视频
  • lua脚本为什么能保证原子性
  • 新手向:Anaconda3的安装与使用方法
  • 【UniApp 日期选择器实现与样式优化实践】
  • 大语言模型介绍
  • 推荐系统的视频特征-视频关键帧特征提取与向量生成
  • 七天学会SpringCloud分布式微服务——02——第一个微服务项目
  • Flink Oracle CDC 总结
  • 六个安全Agent设计模式:有效防止Prompt注入攻击
  • Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」
  • 黑马ReactDay02
  • gitlab https链接转为ssh链接
  • Android 开发 获取Debug 跟 Release 包的SHA1值
  • Host ‘db01‘ is not allowed to connect to this MariaDB server 怎么解决?
  • 原子级制造革命:双原子镧催化剂登顶Angew,焦耳超快加热技术深度解析
  • 卷积神经网络(Convolutional Neural Network, CNN)
  • 论文阅读:A Survey on Large Language Models for Code Generation
  • 量学云讲堂王岩江宇龙2025年第58期视频 主课正课系统课+收评
  • 八股文——JAVA基础:说一下C++与java的区别
  • 【笔记】Docker 配置阿里云镜像加速(公共地址即开即用,无需手动创建实例)
  • 使用pyflink编写demo并将任务提交到yarn集群
  • python的智慧养老院管理系统
  • 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题
  • GBDT:梯度提升决策树——集成学习中的预测利器
  • 自动化测试--Appium和ADB及常用指令
  • python学习笔记(深度学习)
  • 深入浅出:RocketMQ与Kafka的双剑合璧,实现高可用与高吞吐
  • Fisco Bcos学习 - 搭建第一个区块链网络
  • 《从0到1:C/C++音视频开发自学完全指南》