教你如何精準統計出你的接口"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已經是很高的瞭。
總結
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Shell常用服務器日志分析命令總結
- springboot 如何修改默認端口及application.properties常用配置
- ELK收集Tomcat日志的實現
- linux下shell常用腳本命令及有關知識
- Java Tomcat 啟動閃退問題解決集