2020-11-16-RedisQPS采集

2020-11-16  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读