Dre*_*fer 8 lua profiling redis
我有一个使用分布式Redis后端的集群应用程序,动态生成的Lua脚本被分派到redis实例.Lua组件脚本可能变得相当复杂并且具有显着的运行时间,并且我希望能够对它们进行分析以找到热点.
SLOWLOG 对于告诉我脚本很慢,以及它们的速度有多慢很有用,但这不是我的问题.我知道它们有多慢,我想弄清楚它们哪些部分很慢.
redis EVAL文档很清楚redis不会将任何计时功能导出到lua,这使得它看起来可能是一个失败的原因.
那么,简短一个Redis的自定义分支,有没有办法告诉我的Lua脚本哪些部分比其他部分慢?
编辑 我接受了Doug的建议并使用了debug.sethook - 这是我在脚本顶部插入的钩子例程:
redis.call('del', 'line_sample_count')
local function profile()
local line = debug.getinfo(2)['currentline']
redis.call('zincrby', 'line_sample_count', 1, line)
end
debug.sethook(profile, '', 100)
Run Code Online (Sandbox Code Playgroud)
然后,看看我脚本中最热门的10行:
ZREVRANGE line_sample_count 0 9 WITHSCORES
Run Code Online (Sandbox Code Playgroud)
如果您的脚本正在处理绑定(而不是 I/O 绑定),那么您可以使用debug.sethook
带有计数钩子的函数:
\n\n\n计数钩子:在解释器执行每n个计数指令后调用。(此事件仅在 Lua 执行 Lua 函数时发生。)
\n
您必须根据回调中收到的计数构建分析器。
\n\nPepperfishProfiler将是一个很好的起点。它使用os.clock
你没有的东西,但你可以使用钩子计数来进行非常粗略的近似。
PiL 23.3 \xe2\x80\x93 配置文件中也涵盖了这一点
\n 归档时间: |
|
查看次数: |
1181 次 |
最近记录: |