轻松使用 Redis slowlog

之前中秋项目搞活动,用户比较活跃 SE.Redis 频繁报 Timeout 异常,狂翻了一波 issues 发现提这个问题还蛮多的,作者非常频繁的提到使用 slowlog 这个命令进行排查,那么问题就来了,它是干嘛滴? Redis slowlog 是个什么 使用这个命令可以读取或重置 Redis 慢速查询日志。通俗讲就是 redis 可以把执行时间超过我们设定值的命令记录下来,slowlog 是记录到内存中的哦,所以非常快。 这里的执行时间不包括 I/O 操作,比如与客户端,发送应答等等,就是实际执行命令所需的时间(命令唯一执行的阶段,线程被阻塞且不能同时处理其他请求)。 设置 Redis slowlog 两种方式: 可以通过配置 redis.conf 来完成。 运行时,使用 CONFIG GET 和 CONFIG SET 命令配置。 这里我们主要说的是第二种方式,您可以使用两个参数来配置慢日志:slowlog-log-slow-than * ,告诉 Redis, 记录超过 * 微秒 内的命令执行情况。 需要注意的是,设置负数表示禁用 slowlog ,而设置 0 则强制记录每个命令的执行情况。 以下是 slowlog 的设置使用说明: redis 127.0.0.1:6379>config set slowlog-log-slower-than 10000 "OK" redis 127.0.0.1:6379>config get slowlog-log-slower-than 1) "slowlog-log-slower-than" 2) "10000" 那么问题又来了,slowlog 是记录再内存中的,如果记录所有的命令 log 会不会把内容撑爆呢? 答案是当然不会。slowlog 记录的 log 数是有最大长度限制的,我们可以通过 slowlog-max-len 来查询 slowlog 的最大长度。最小值为零。当一个新的命令被记录下来,并且如果已经达到它的最大长度时,最老的一个 log 将从队列中删除,FIFO 。 另外,使用 slowlog len 命令可以查看当前已记录的数量。 使用 slowlog reset 重置已记录的 slowlog 信息。 如何阅读 slowlog 我们已经了解 slowlog 是记录在内存中的,所以您可以启用所有命令的日志记录即 slowlog-log-slow-than 配置参数设置为 0 便于监测性能。 要读取 slowlog,使用 SLOWLOG GET 获取命令,它返回慢日志中的每一个条目。可以只返回N个最近的条目,将一个附加参数传递给命令(例如 SLOWLOG GET 2)。 redis 127.0.0.1:6379> slowlog get 2 1) 1) (integer) 14 //slowlog 唯一标识 2) (integer) 1309448221 //unix 时间戳 3) (integer) 15 //命令执行的时间,单位:微秒 4) 1) "ping" //具体执行的命令,最多记录128 2) 1) (integer) 13 2) (integer) 1309448128 3) (integer) 30 4) 1) "slowlog" 2) "get" 3) "100" //其中 Redis 4.0 及以上版本还包含以下两部分: 5) "127.0.0.1:58217" //客户端IP:Port 6) "worker-123" //客户端名称 最后,需要注意此命令需要 2.2.12及以上版本的 redis 才能支持。 文中如有不对之处,欢迎指正。 本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接。 作者:Nuss 出处:http://www.cnblogs.com/Nuss/ https://www.cnblogs.com/Nuss/p/9784732.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信