gpt4 book ai didi

lua - 我可以分析在 Redis 中运行的 Lua 脚本吗?

转载 作者:IT王子 更新时间:2023-10-29 05:56:28 24 4
gpt4 key购买 nike

我有一个使用分布式 Redis 后端的集群应用程序,动态生成的 Lua 脚本被分派(dispatch)到 redis 实例。 Lua 组件脚本可能会变得相当复杂并且有很长的运行时间,我希望能够分析它们以找到热点。

慢日志is useful感谢您告诉我我的脚本很慢,而且到底有多慢,但这不是我的问题。我知道它们有多慢,我想弄清楚它们的哪些部分很慢。

The redis EVAL docs很明显,redis 不会将任何计时功能导出到 lua,这使得这看起来可能是一个失败的原因。

那么,Redis 的自定义分支,有什么方法可以判断我的 Lua 脚本的哪些部分比其他部分慢?

编辑我采纳了 Doug 的建议并使用了 debug.sethook - 这是我在脚本顶部插入的 Hook 例程:

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)

然后,查看我的脚本中 HitTest 门的 10 行:

ZREVRANGE line_sample_count 0 9 WITHSCORES

最佳答案

如果您的脚本是处理绑定(bind)(不是 I/O 绑定(bind)),那么您可以使用 debug.sethook带有计数钩子(Hook)的函数:

The count hook: is called after the interpreter executes every count instructions. (This event only happens while Lua is executing a Lua function.)

您必须根据您在回调中收到的计数来构建分析器。

PepperfishProfiler将是一个很好的起点。它使用您没有的 os.clock,但您可以使用 Hook 计数进行非常粗略的近似。

这也包含在 PiL 23.3 – Profiles

关于lua - 我可以分析在 Redis 中运行的 Lua 脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16370333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com