美文网首页
2020-11-16-RedisQPS采集

2020-11-16-RedisQPS采集

作者: 爱钓鱼的码农 | 来源:发表于2020-11-16 17:26 被阅读0次

    采集策略

    command info中可获取Redis的相关动态参数。
    Info解读
    1、(total_commands_processed2-total_commands_processed1/step
    2、instantaneous_ops_per_sec

    total_commands_processed

    Total number of commands processed by the server
    通过此值可以获取Redis执行命令的次数做差除以时间得出QPS,但此值往往比业务侧操作Redis的统计次数要高,因为可能会含有pipline管道含有多次命令。

    instantaneous_ops_per_sec

    Number of commands processed per second (每秒执行的command的次数)

    在server.c文件里边有个最核心的入口函数 Call(){ server.stat_numcommands++;} 这里会累加每次执行的命令数,而这个值正好就是我们调用INFO STATS 命令输出项 :total_commands_processed 的值,而另外一个 instantaneous_ops_per_sec 是通过计算的来的,通过捌捌源代码我们可以知道如下信息:我们Redis-Server会每100ms执行一次采样统计,这个统计结果放入一个数组存放,当我们调用 INFO 命令时,其内部会调用函数:getInstantaneousMetric(STATS_METRIC_COMMAND)。
    而这个函数里边就是计算这个 ops 的方法,通过以上代码可知,instantaneous_ops_per_sec 实际上就是我们过去16个 100ms 周期内的平均QPS值。

    通过以上分析,我们可以通过 instantaneous_ops_per_sec 来较为实时的获取当前的一个QPS情况,尤其是当我们对Redis实例数据采集周期比较长的时候,通过total_command_process 计算出来的有可能会被平均,而透过instantaneous_ops_per_sec 这个值得到的数据恰好反应了最近2s的运行情况。

    代码片段:

    #define STATS_METRIC_SAMPLES 16     /* Number of samples per metric. */
    #define STATS_METRIC_COMMAND 0      /* Number of commands executed. */
    
    /* Return the mean of all the samples. */
    long long getInstantaneousMetric(int metric) {
        int j;
        long long sum = 0;
    
        for (j = 0; j < STATS_METRIC_SAMPLES; j++)
            sum += server.inst_metric[metric].samples[j];
        return sum / STATS_METRIC_SAMPLES;
    }
    

    相关文章

      网友评论

          本文标题:2020-11-16-RedisQPS采集

          本文链接:https://www.haomeiwen.com/subject/vpjzbktx.html