• 轻松使用 Redis slowlog


    之前中秋项目搞活动,用户比较活跃 SE.Redis 频繁报 Timeout 异常,狂翻了一波 issues 发现提这个问题还蛮多的,作者非常频繁的提到使用 slowlog 这个命令进行排查,那么问题就来了,它是干嘛滴?

    Redis slowlog 是个什么

    使用这个命令可以读取或重置 Redis 慢速查询日志。通俗讲就是 redis 可以把执行时间超过我们设定值的命令记录下来,slowlog 是记录到内存中的哦,所以非常快。

    这里的执行时间不包括 I/O 操作,比如与客户端,发送应答等等,就是实际执行命令所需的时间(命令唯一执行的阶段,线程被阻塞且不能同时处理其他请求)。

    设置 Redis slowlog

    两种方式:

    1. 可以通过配置 redis.conf 来完成。
    2. 运行时,使用 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
        11) (integer) 14             //slowlog 唯一标识
           2) (integer) 1309448221     //unix 时间戳
           3) (integer) 15             //命令执行的时间,单位:微秒
           41"ping"                //具体执行的命令,最多记录128
        21) (integer) 13
           2) (integer) 1309448128
           3) (integer) 30
           41"slowlog"
              2"get"
              3"100"

    //其中 Redis 4.0 及以上版本还包含以下两部分:

           5"127.0.0.1:58217"         //客户端IP:Port
           6"worker-123"              //客户端名称

    最后,需要注意此命令需要 2.2.12及以上版本的 redis 才能支持。

  • 相关阅读:
    Linux/Unix time时间戳的处理转换函数
    linux下socket编程:区分close()与shutdown()
    数组注意事项
    grep v XXXXX
    [转]计算机读研的取向
    tail f 文件名
    字符串与整数、浮点数、无符号整数之间的转换常用函数
    Linux共享库(动态库)与进程之间全局变量是无法共享的
    静态库、共享库、动态库的创建和使用
    请教bcopy和memcpy的区别
  • 原文地址:https://www.cnblogs.com/Nuss/p/9784732.html
Copyright © 2020-2023  润新知