redis SLOWLOG命令是否测量CPU时间或实时?

时间:2017-10-18 15:52:13

标签: redis

Redis SLOWLOG在redis中记录慢命令的时间。记录的时间以微秒为单位。但是,我不确定时间是CPU时间还是实时。因此,如果机器负载很重,并且redis进程正在饥饿,那么在其他快速命令上会导致更慢的日志条目吗?

2 个答案:

答案 0 :(得分:2)

SLOWLOG给出了挂钟感的时间,而不是CPU。当命令超过配置的执行时间阈值时,会将条目添加到日志中。如果CPU处于饥饿状态且常规操作或快速操作需要更长时间才能完成并超过阈值,则确实会将其添加到日志中。

答案 1 :(得分:1)

Redis使用实时而非CPU 1。

通过互联网搜索后,我发现了有关redis slowlog的有趣链接(http://blog.wjin.org/posts/redis-slowlog.html),这让我有机会搜索Redis的源代码。

根据源代码,事实证明,慢速日志中的数据是通过调用this function来添加的 start = ustime(); c->cmd->proc(c); duration = ustime()-start;

搜索仅在server.c文件内调用此函数的位置。

因此记录持续时间,并从[此代码段]生成。(https://github.com/antirez/redis/blob/bb3b5ddd1968d2715acc37b63124ccf461276160/src/server.c#L2207

/* Return the UNIX time in microseconds */
long long ustime(void) {
    struct timeval tv;
    long long ust;

    gettimeofday(&tv, NULL);
    ust = ((long long)tv.tv_sec)*1000000;
    ust += tv.tv_usec;
    return ust;
}

ustime是使用following source code

生成的
01

所以gettimeofday负责持续时间的制作,并显示真实时间,而不是CPU。