日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

后端开发都应该了解点接口的压力测试(Apache Bench版)

發(fā)布時間:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 后端开发都应该了解点接口的压力测试(Apache Bench版) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

小A:小B,最近調你的接口老是超時呀,8秒都還沒返回結果,是不是有性能問題呀!
小B :我看看~~

類似這樣的對話,在現(xiàn)實中是時有發(fā)生的,不是特別嚴重的話,往往大家也不會去重視這個事。

尤其是在一些測試資源并不完備的,開發(fā)人員對性能測試沒有接觸過的一些公司,遇到這些會顯得更加力不從心。

本著對自己寫出來的東西負責,上線之前,我們都應該對自己的接口進行一個簡單的壓力測試。

其實做這一步也是為了讓我們心里有個度,有個底,不至于說連能承受多少量都不知道。如果什么都不知道,那很容易陷入一個無底深淵,這是一件很可怕的事情。

老黃平時用的比較多的是Apache Bench,當然,jmeter、wrk和vegeta也都是非常不錯的。

說說用這個的原因吧,免安裝,綠色版,開箱(解壓)即用,說白了,老黃其實就是懶鬼~~

jmeter要裝jdk,懶得弄。

wrk/wrk2 要自己編譯,mac上面可以直接安裝,但是我的mac配置不高,不折騰。

vegeta用起來感覺不是很順手,后面再慢慢挖掘。

Apache Bench 介紹

Apache Bench 是Apache服務器自帶的一個web壓力測試工具,簡稱ab。

ab是一個命令行工具,對發(fā)起負載的本機要求很低,根據(jù)ab命令可以創(chuàng)建很多的并發(fā)訪問線程,模擬多個訪問者同時對某一URL地址進行訪問,因此可以用來測試目標服務器的負載壓力??偟膩碚fab工具小巧簡單,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監(jiān)控。

ab進行的測試的本質是基于HTTP協(xié)議,可以理解為對web服務器軟件的黑盒性能測試,獲得的一切數(shù)據(jù)和計算結果,都是可以通過HTTP來解釋的。

Apache Bench 簡單使用

下面的示例都是在CentOS上面的。

通過下面的命令安裝,

yum -y install httpd-tools

裝好之后,運行一下ab -V就可以看到版本信息。

ab -VThis is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

運行一下ab -h就可以看到幫助信息。

幫助信息有很多,也比較詳細,老黃把一些常用的參數(shù)都添加了注釋,方便大家查看。

其中最常用的兩個參數(shù)是 -c 和 -n,當然如果是POST/PUT請求的話,還離不開 -T 和 -p。

說了不少廢話,來看看怎么使用才是重點。

下面準備了兩個簡單的接口來進行演示

[ApiController] [Route("test")] public class TestController : ControllerBase {[HttpGet]public string Get() => "GET";[HttpPost]public string Post([FromBody]string value) => value; }

這個接口是跑在docker里面的(一臺2c4g的活動云服務器),下面的圖可以看到具體的信息,還有兩個接口的訪問詳情。

先來壓一下GET請求的接口, 200并發(fā),5000個請求。

ab -c 200 -n 5000 localhost:9000/test

POST請求有點不一樣,要先準備一下body的參數(shù),這里在/tmp目錄創(chuàng)建了一個post.json文件,里面就一個字符串。

cat /tmp/post.json "Post"

在壓測命令里面,指定Content-Type為application/json, 參數(shù)的數(shù)據(jù)文件路徑是/tmp/post.json

同樣也是200并發(fā),5000個請求。

ab -c 200 -n 5000 -T "application/json" -p /tmp/post.json localhost:9000/test

到這里,大家對怎么壓測,應該都不會太陌生了,比較陌生的應該是壓測的結果要怎么看。

下面拿其中一個結果示例來說明各項指標的含義:

Server Software: Kestrel # 服務器軟件名稱 Server Hostname: localhost # 服務器主機名 Server Port: 9000 # 服務器端口Document Path: /test # 測試的URL路徑 Document Length: 3 bytes # 文檔大小Concurrency Level: 200 # 并發(fā)數(shù) Time taken for tests: 2.386 seconds # 消耗的總時間 Complete requests: 5000 # 總次數(shù) Failed requests: 0 # 失敗的請求數(shù) Write errors: 0 # 網(wǎng)絡連接寫入錯誤數(shù) Total transferred: 680000 bytes # 傳輸?shù)目倲?shù)據(jù)量 HTML transferred: 15000 bytes # HTML文檔的總數(shù)據(jù)量 Requests per second: 2095.43 [#/sec] (mean) # (平均每秒的請求數(shù)) 這個是非常重要的參數(shù)數(shù)值,服務器的吞吐量 Time per request: 95.446 [ms] (mean) # (所有并發(fā)用戶都請求一次的平均時間) Time per request: 0.477 [ms] (mean, across all concurrent requests) # (單個用戶請求一次的平均時間) Transfer rate: 278.30 [Kbytes/sec] received # 每秒獲取的數(shù)據(jù)長度 (傳輸速率,單位:KB/s)# 網(wǎng)絡上消耗的時間的分解 Connection Times (ms)min mean[+/-sd] median max Connect: 0 3 3.7 2 20 Processing: 12 68 120.0 53 1057 Waiting: 1 67 120.1 52 1050 Total: 15 71 119.8 55 1058# 整個場景中所有請求的響應情況 Percentage of the requests served within a certain time (ms)50% 5566% 6375% 6880% 7190% 7795% 8898% 10599% 1012100% 1058 (longest request)

這么多的指標,我們可以重點關注下面幾個

  • Requests per second

  • Failed requests

  • 90%,95%和98%的響應時間

  • 第一個是吞吐量,這個上不去,其實是挺尷尬的。

    第二個是失敗的請求數(shù),這個數(shù)要盡可能的低,最好是0,沒有失敗的。設想一下,100個請求,80個都是失敗的,這個結果還能有意義不。

    第三個是響應時間,這個可以看到大部分請求的速度如何。

    進行壓測時的一些小建議:

    • 壓測盡可能讓并發(fā)數(shù)從低往高慢慢遞增,避免一開始就設的太大,一個比較好的參考依據(jù)是現(xiàn)在階段線上環(huán)境的并發(fā)數(shù)

    • 壓測的持續(xù)時間可以持續(xù)久一點,這樣可以看到更多可能出現(xiàn)的情況,可以考慮5分鐘,8分鐘,15分鐘等

    • 有條件的,壓測和被壓測的機器要獨立,因為壓測的時候也會有資源占用,可能會影響被壓測的接口

    • 不要只看壓測的結果數(shù)據(jù),還要留意被壓測機的cpu,內存等指標在壓測時是否正常

    • 內網(wǎng)壓測的效果達到預期后,再考慮外網(wǎng)的,網(wǎng)絡因素,可控性不強

    分布式壓測和全鏈路壓測,暫時不用想了,留給更專業(yè)的人去做吧~~

    總結

    以上是生活随笔為你收集整理的后端开发都应该了解点接口的压力测试(Apache Bench版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。