你们好,我是渣渣烟。面试
我又来水文章了。这篇文章我我的感受含金量不是太大,大概5分钟左右就能看完!其实你们都知道,我不爱写这种操做型的文章,一顿截图写几个命令就搞定了,含金量不高。tomcat
然而,近期有一段聊天记录以下服务器
看到这里,不要吃惊,不要惊讶!mvc
那个很猥琐的,没有打码的头像,正是渣渣烟本人(此处应有反驳的声音,那个头像哪里猥琐了,分明帅气逼人好么)!app
因此,牛皮都吹出去了。写个文章,本身给本身圆上!负载均衡
咱们先回忆一下,QPS的概念以下所示:ui
QPS(Query Per Second):每秒请求数,就是说服务器在一秒的时间内处理了多少个请求。spa
那咱们怎么估出每秒钟能处理多少请求呢?
OK,用日志来估计!那日志怎么记录呢,细分下来,有两种方式。
方式一:本身在接口里记录
这种方式指的是在你的接口里,日志记录了能体现该接口特性的,并具备惟一性的字符串!
例如,下面这一段代码日志
@RestController
@RequestMapping("/home")
public class IndexController {
//省略
@RequestMapping("/index")
String index() {
logger.info("渣渣烟");
return "index";
}
}
假设如今我要统计index这个接口的QPS!
OK,什么叫能体现该接口特性的字符串呢!就像上面的"渣渣烟"这个字符串,只在index这个接口里出现过,没在其余其余接口里出现过!所以,只要统计出"渣渣烟"这个字符串在日志里的出现次数,就能知道该接口的请求次数!code
什么叫具备惟一性的字符串呢!所谓惟一性,指的是"渣渣烟"这个字符串,在这个接口的一次调用流程中,只出现一次!若是出现两次,就会致使到时候统计出来的次数会多一倍,因此尽可能选择具备惟一性的字段!
方式二:利用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
出来等结果就是
2 [27/Dec/2018:20:40:44
1 [27/Dec/2018:20:47:58
1 [27/Dec/2018:20:47:42
1 [27/Dec/2018:20:41:57
而后你就知道,原来在20:40:44 分。。这个接口的QPS最高,达到了惊人的2QPS!
如今,来说一下命令什么意思!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多大!
而后接下来就是:
渣渣烟写到此处,竟无语凝噎。但愿你们有所收获!