【发布时间】:2013-04-28 12:45:06
【问题描述】:
我有一个使用分布式 Redis 后端的集群应用程序,动态生成的 Lua 脚本被分派到 redis 实例。 Lua 组件脚本可能会变得相当复杂并且运行时间很长,我希望能够分析它们以找到热点。
SLOWLOG is useful 告诉我我的脚本很慢,以及它们到底有多慢,但这不是我的问题。我知道它们有多慢,我想弄清楚它们的哪些部分是慢的。
The redis EVAL docs 很清楚,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)
然后,查看我的脚本中最热门的 10 行:
ZREVRANGE line_sample_count 0 9 WITHSCORES
【问题讨论】:
-
看看我做的这个 Redis-wrecker:github.com/RedisLabs/redis-lua-debugger