0Pricing
Lua Academy · 课时

使用 jit.p 和 perf 进行性能分析

使用 jit.p 分析 Lua 代码,标注热点路径并减少内存分配。

使用 jit.p 和 perf 进行性能分析 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。

为什么要进行性能分析

性能分析可以找出消耗 CPU 时间最多的函数。如果不进行性能分析,优化工作往往会误指向并非瓶颈的代码。

jit.p:LuaJIT 内置分析器

LuaJIT 包含一个基于采样的分析器 jit.p。您可以从命令行启用它,也可以在脚本内部启用。

-- Command line:
luajit -jp=s script.lua
-- Or inside script:
require("jit.p").start("s")  -- sample at function level
-- ... code ...
require("jit.p").stop()

jit.p 模式

模式:"s" 按函数采样,"l" 按行采样,"i" 显示解释器与 JIT 的占比。输出到文件:"-jp=s,output.txt"。

读取 jit.p 输出

输出会显示各部分耗时所占的百分比。请重点关注排名靠前的几个热点。

-- Example output:
-- 40%  mymodule.hotLoop
-- 25%  table.sort
-- 15%  string.format
-- ...

使用 jit.dump 查看跟踪详情

require("jit.dump").on() 会输出每条已编译跟踪的详细 IR 和机器代码。您可以借此了解 JIT 实际编译了哪些内容。

使用 Linux perf

在 Linux 上,perf record -g luajit script.lua 会在 OS 层面采集调用栈。结合 perf report 可以生成火焰图。

LuaJIT + perf 映射文件

LuaJIT 可以生成 perf 符号映射文件,让 perf 报告显示 Lua 函数名称,而不是原始地址:luajit -jp=p script.lua。

使用 os.clock 进行微基准测试

对于快速基准测试,请使用 os.clock() 测量实际耗时。多次重复执行该操作,以平均掉测量噪声。

local function bench(fn, iters)
  local t0 = os.clock()
  for _ = 1, iters do fn() end
  return (os.clock() - t0) / iters
end

隔离热点

完成分析后,将热点函数提取为最小的独立基准测试。这样可以方便地反复尝试优化,并验证改进效果。

GC 对分析的影响

GC 暂停会在分析结果中表现为尖峰。请在禁用 GC 的情况下(collectgarbage("stop"))进行测量,以区分算法耗时和 GC 耗时。

分析最佳实践

  • 使用真实的数据进行分析,而不是使用微基准测试。
  • 分析发布版本,而不是调试版本。
  • 每次修改前后都进行测量。
  • 不要优化总耗时低于 5% 的代码。

分析问题

jit.p 的 "s" 模式测量什么?

回顾:使用 jit.p 和 perf 进行分析

使用 jit.p 进行 Lua 层面的函数或行分析,使用 jit.dump 检查 JIT 跟踪,使用 Linux perf 生成 OS 层面的火焰图。测量、优化,再次测量。

常见问题解答

「使用 jit.p 和 perf 进行性能分析」课时是免费的吗?

是的 — 「使用 jit.p 和 perf 进行性能分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。

「使用 jit.p 和 perf 进行性能分析」这节课中我会学到什么?

使用 jit.p 分析 Lua 代码,标注热点路径并减少内存分配。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Lua Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 jit.p 和 perf 进行性能分析」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Lua Academy 课中编写并运行代码吗?

能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. LuaJIT 架构概览
  2. 编写适合 JIT 的 Lua 代码
  3. 使用 jit.p 和 perf 进行性能分析
  4. 基准测试模式
← 返回 Lua Academy