教你如何精准统计出你的接口"QPS"

 更新时间:2021年08月11日 10:20:17   作者:科比不来it  
今天小编就为大家分享一篇关于QPS的精准计算方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

QPS是什么

我们先回忆一下,QPS的概念如下所示:

QPS(Query Per Second):每秒请求数,就是说服务器在一秒的时间内处理了多少个请求。

那我们怎么估出每秒钟能处理多少请求呢?

OK,用日志来估计!那日志怎么记录呢,细分下来,有两种方式。

方式一:自己在接口里记录

这种方式指的是在你的接口里,日志记录了能体现该接口特性的,并具有唯一性的字符串!

例如,下面这一段代码

@RestController 
@RequestMapping("/home") 
public class IndexController {
 //省略
 @RequestMapping("/index") 
 String index() { 
 logger.info("渣渣烟");
 return "index"; 
 } 
} 

假设现在我要统计index这个接口的QPS!

OK,什么叫能体现该接口特性的字符串呢!就像上面的"渣渣烟"这个字符串,只在index这个接口里出现过,没在其他其他接口里出现过!因此,只要统计出"渣渣烟"这个字符串在日志里的出现次数,就能知道该接口的请求次数!

什么叫具有唯一性的字符串呢!所谓唯一性,指的是"渣渣烟"这个字符串,在这个接口的一次调用流程中,只出现一次!如果出现两次,就会导致到时候统计出来的次数会多一倍,所以尽量选择具有唯一性的字段!

方式二:利用tomcat的access log

如果你的日志里没有我上面提到的字段。OK,那就用tomcat自带的access log功能吧!

因为我平时内置的tomcat比较多,指定下面两个属性即可

server.tomcat.accesslog.directory
设定log的目录,默认: logs
server.tomcat.accesslog.enabled
是否开启access log,默认: false

此时,你访问一次/home/index地址,会有下面这样日志

127.0.0.1 - - [19/Aug/2019:23:55:27 +0800] “POST /home/index HTTP/1.1” 200 138
那么,你就可以根据日志中,该记录的出现次数,统计index接口的QPS。

实战

假设,你这会日志已经拿到手了,名字为xxx.log。

假设日志内容如下

//省略,都长差不多,贴其中一条就行
0:0:0:0:0:0:0:1 - - [27/Dec/2018:20:41:57 +0800] "GET /mvc2/upload.do HTTP/1.1" 404 949 http-bio-8080-exec-5 43
//省略

这个时候,你执行一串命令长下面这样的,进行统计就行!

cat xx.log |grep 'GET /mvc2'|cut -d ' ' -f4|uniq -c|sort -n -r 

出来等结果就是

20 [27/Dec/2018:20:40:44
11 [27/Dec/2018:20:47:58
10 [27/Dec/2018:20:47:42
1 [27/Dec/2018:20:41:57

然后你就知道,原来在20:40:44 分。。这个接口的QPS最高,达到了惊人的20QPS!

现在,来讲一下命令什么意思!

cat xxx.log : 读文件内容

grep ‘GET /mvc2' : 将文件内容按照GET /mvc2 进行过滤

cut -d ' ' -f4 : 过滤出来的内容按照空格进行分割,取第四列内容

uniq -c : 每列旁边显示该行重复出现的次数

sort -n -r : 依照数值的大小排序

那么,如果是其他日志格式,无外乎 ”cut语句“的处理不同而已,道理类似!此法可以估算出单机的某接口的 “QPS” 是多少!

估算

我们现在估计出了单机的QPS。接下来,估算集群的QPS。

这就要根据负载均衡的策略来估计!

比如,你部署了32台机器,负载均衡的策略恰巧为轮询,那集群的QPS就是单机的QPS乘32就好了。

所以,根据具体的策略,来估计整个集群的QPS多大!一般有2000qps已经是很高的了。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • JavaFx 实现按钮防抖功能

    JavaFx 实现按钮防抖功能

    最近Sun公司推出了JavaFX框架,使用它可以利用JavaFX编程语言来开发富互联网应用程序(RIA),这篇文章主要介绍了JavaFx 实现按钮防抖功能,需要的朋友可以参考下
    2022-01-01
  • 教你利用SpringBoot写一个属于自己的Starter

    教你利用SpringBoot写一个属于自己的Starter

    如果我们将可独立于业务代码之外的功配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可,SpringBoot为我们完成自动装配,简直不要太爽,这篇文章主要给大家介绍了关于如何利用SpringBoot写一个属于自己的Starter,需要的朋友可以参考下
    2022-03-03
  • java 多线程-锁详解及示例代码

    java 多线程-锁详解及示例代码

    本文主要介绍 Java 多线程锁的基础知识,这里整理了相关资料及示例代码有兴趣的小伙伴可以参考下
    2016-09-09
  • java 常规轮询长轮询Long polling实现示例详解

    java 常规轮询长轮询Long polling实现示例详解

    这篇文章主要为大家介绍了java 常规轮询长轮询Long polling实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 详解Java Web项目启动执行顺序

    详解Java Web项目启动执行顺序

    这篇文章主要介绍了详解Java Web项目启动执行顺序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Java反射机制详解_动力节点Java学院整理

    Java反射机制详解_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java反射机制的相关资料,主要包括反射的概念、作用
    2017-06-06
  • java外部类与内部类的关系详解

    java外部类与内部类的关系详解

    本文详细讲解了java外部类与内部类的关系,用代码演示了外部类调用内部类的方法。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 基于Java实现XML文件的解析与更新

    基于Java实现XML文件的解析与更新

    配置文件可以有很多种格式,包括 INI、JSON、YAML 和 XML。每一种编程语言解析这些格式的方式都不同。本文将通过Java语言实现XML文件的解析与更新,需要的可以参考一下
    2022-03-03
  • Spring+Quartz实现动态任务调度详解

    Spring+Quartz实现动态任务调度详解

    这篇文章主要介绍了Spring+Quartz实现动态任务调度详解,最近经常基于spring boot写定时任务,并且是使用注解的方式进行实现,分成的方便将自己的类注入spring容器,需要的朋友可以参考下
    2024-01-01
  • 图解Java经典算法归并排序的原理与实现

    图解Java经典算法归并排序的原理与实现

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。本文将通过动图详解归并排序的原理及实现,需要的可以参考一下
    2022-09-09

最新评论