我能在Redis中分析运行的Lua脚本吗?
2017-5-23 12:31:43
收藏:0
阅读:142
评论:2
我有一个集群应用程序,使用分布式 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)
然后,查看我脚本的最热门的 10 行:
ZREVRANGE line_sample_count 0 9 WITHSCORES
点赞
用户33252
如果您的脚本是处理绑定的(不是 I/O 绑定),那么您可能可以使用 debug.sethook 函数和计数钩子:
计数钩子:在解释器执行每个计数指令后调用。(此事件仅在 Lua 执行 Lua 函数时发生。)
您需要基于回调中接收到的计数构建性能分析器。
PepperfishProfiler 是一个不错的起点。它使用 os.clock,而您则可以使用钩子计数进行一个非常粗略的近似。
这也在 PiL 23.3 – Profiles 中涉及。
2013-05-04 04:48:03
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在标准的 Lua C 中,你不能直接获取毫秒级别的时间,因为它不是一个内置函数,只返回秒数。因此,有两个选项可用:你可以编写自己的 Lua 扩展 DLL 以返回毫秒级别的时间,或者:
你可以使用毫秒级别的时间进行基本的基准测试。你可以使用 LuaSocket 访问当前的毫秒级别时间。虽然这会给你的项目添加一个依赖项,但这是进行简单基准测试的有效方法。
require "socket" t = socket.gettime();