精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

測(cè)試妹子問(wèn)我會(huì)壓測(cè)嗎?我笑了笑并給她看了這篇文章

開(kāi)發(fā) 開(kāi)發(fā)工具
并發(fā)測(cè)試中,JMeter和Apache Bench是比較好的選擇,由于Apache Bench是基于命令行的,ab處理速度更快,而Jmeter更準(zhǔn)確。

[[400340]]

簡(jiǎn)介:

  • 一、Psotman
  • 二、Apache Bench(AB)
  • 三、JMeter
  • 四、代碼

一、Psotman:Http請(qǐng)求模擬工具

嚴(yán)格來(lái)說(shuō)postMan并不是并發(fā)請(qǐng)求,而是串行執(zhí)行的,現(xiàn)在用postMan更多的是用來(lái)測(cè)試Http連接的一個(gè)工具,但是也是一個(gè)很實(shí)用的工具,也有一些比較強(qiáng)大的功能和優(yōu)點(diǎn)

1.1 下載地址

  1. 1) Postman for MAC:https://app.getpostman.com/app/download/osx64?utm_source=site&utm_medium=apps&utm_campaign=macapp&_ga=2.21151352.2119858274.1527039878-1088353859.1527039878 
  2. 2) Postman for windows X64:https://app.getpostman.com/app/download/win64?_ga=2.201562513.1250696341.1530543681-1582181135.1530543681 
  3. 3) Postman for windows X86:https://app.getpostman.com/app/download/win32?_ga=2.21151352.2119858274.1527039878-1088353859.1527039878 
  4. 4) Postman for linux X64:https://app.getpostman.com/app/download/linux64?_ga=2.96050783.2119858274.1527039878-1088353859.1527039878 
  5. 5) Postman for Linux X86:https://app.getpostman.com/app/download/linux32?_ga=2.96050783.2119858274.1527039878-1088353859.1527039878 
  6. 6) 官網(wǎng)地址:https://www.getpostman.com/ 

1.2 操作說(shuō)明(以win64為例)

1、打開(kāi)Postman,輸入我們需要測(cè)試的網(wǎng)址,點(diǎn)擊左邊的"+",保存請(qǐng)求

2、點(diǎn)擊"+"后,彈出下面提示,保存鏈接地址生成測(cè)試文件夾名稱(chēng)

3、保存成功后,選擇"collections"后選擇文件夾名為"gbfTest"的,點(diǎn)擊小三角——點(diǎn)擊Run

4、這里我們可以設(shè)置請(qǐng)求次數(shù)和間隔時(shí)間,一般間隔時(shí)間會(huì)設(shè)置為0,設(shè)置好之后,我們點(diǎn)擊Run gbfTest運(yùn)行

5、查看結(jié)果,從圖中我們可以看到百度的響應(yīng)速度還是很快的

6、點(diǎn)擊 Run Summary 可以看到運(yùn)行結(jié)果概述

7、測(cè)試全部通過(guò)

8、測(cè)試結(jié)果可以通過(guò)點(diǎn)擊Export Results按鈕進(jìn)行導(dǎo)出,方便分析每次的請(qǐng)求時(shí)間

二、Apace Bench(AB):Apache附帶的工具,測(cè)試網(wǎng)站性能

2.1 簡(jiǎn)介

Apache Bench 是 Apache 服務(wù)器自帶的一個(gè)web壓力測(cè)試工具,簡(jiǎn)稱(chēng)ab。ab又是一個(gè)命令行工具,對(duì)發(fā)起負(fù)載的本機(jī)要求很低,根據(jù)ab命令可以創(chuàng)建很多的并發(fā)訪(fǎng)問(wèn)線(xiàn)程,模擬多個(gè)訪(fǎng)問(wèn)者同時(shí)對(duì)某一URL地址進(jìn)行訪(fǎng)問(wèn),因此可以用來(lái)測(cè)試目標(biāo)服務(wù)器的負(fù)載壓力。總的來(lái)說(shuō)ab工具小巧簡(jiǎn)單,它不僅可以對(duì)apache服務(wù)器進(jìn)行網(wǎng)站訪(fǎng)問(wèn)壓力測(cè)試,也可以對(duì)或其它類(lèi)型的服務(wù)器進(jìn)行壓力測(cè)試。比如nginx、tomcat、IIS等,上手學(xué)習(xí)較快,可以提供需要的基本性能指標(biāo),但是沒(méi)有圖形化結(jié)果,不能監(jiān)控

2.2 原理

ab命令會(huì)創(chuàng)建多個(gè)并發(fā)訪(fǎng)問(wèn)線(xiàn)程,模擬多個(gè)訪(fǎng)問(wèn)者同時(shí)對(duì)某一URL地址進(jìn)行訪(fǎng)問(wèn)。它的測(cè)試目標(biāo)是基于URL的,因此,它既可以用來(lái)測(cè)試apache的負(fù)載壓力,也可以測(cè)試nginx、lighthttp、tomcat、IIS等其它Web服務(wù)器的壓力

2.3 Apache Bench安裝

Apache服務(wù)器,下載地址:https://www.apachelounge.com/download/

選擇:httpd-2.4.41-win64-VS16 下載目錄結(jié)構(gòu):

2.4 Apache Bench 使用

運(yùn)行環(huán)境:Windows7 Apache Bench版本:httpd-2.4.41-win64-VS16

1、進(jìn)入cmd目錄下,進(jìn)入我們解壓好的Apache Bench目錄下

3 使用命令

  1. ab -c 10 -n 10 http://www.baidu.com/ 或者 ab.exe -n 1000 -c 500 http://www.baidu.com 

對(duì)百度首頁(yè)進(jìn)行一個(gè)請(qǐng)求總數(shù)為1000,本次請(qǐng)求并發(fā)數(shù)為500的測(cè)試

參數(shù)分析:

  1. C:\Users\Lenovo\Downloads\httpd-2.4.41-win64-VS16\Apache24\bin>ab.exe -n 1000 -c 
  2.  500 http://www.baidu.com/path 
  3. This is ApacheBench, Version 2.3 <$Revision: 1843412 $> 
  4. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
  5. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  6.  
  7. Benchmarking www.baidu.com (be patient) 
  8. Completed 100 requests 
  9. Completed 200 requests 
  10. Completed 300 requests 
  11. Completed 400 requests 
  12. Completed 500 requests 
  13. Completed 600 requests 
  14. Completed 700 requests 
  15. Completed 800 requests 
  16. Completed 900 requests 
  17. Completed 1000 requests 
  18. Finished 1000 requests 
  19.  
  20.  
  21. Server Software:        Apache      #測(cè)試服務(wù)器的名字 
  22. Server Hostname:        www.baidu.com  #請(qǐng)求的URL主機(jī)名 
  23. Server Port:            80        #請(qǐng)求端口 
  24.  
  25. Document Path:          /path      #請(qǐng)求路徑   
  26. Document Length:        222 bytes    #頁(yè)面大小 
  27.  
  28. Concurrency Level:      500        #并發(fā)量,設(shè)置的參數(shù)之一 
  29. Time taken for tests:   45.805 seconds  #整個(gè)測(cè)試所用的時(shí)間/秒 
  30. Complete requests:      1000      #完成的請(qǐng)求數(shù) 
  31. Failed requests:        0        #失敗的請(qǐng)求數(shù) 
  32. Non-2xx responses:      1000      #接收到的HTTP響應(yīng)數(shù)據(jù)的頭信息中含有2XX以外的狀態(tài)碼,則會(huì)在測(cè)試結(jié)果中顯示另一個(gè)名為“Non-2xx responses”的統(tǒng)計(jì)項(xiàng),用于統(tǒng)計(jì)這部分請(qǐng)求數(shù)(1000) 
  33. Total transferred:      484000 bytes  #表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)長(zhǎng)度總和 
  34. HTML transferred:       222000 bytes  #表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)中正文數(shù)據(jù)的總和 
  35. Requests per second:    21.83 [#/sec] (mean)    #吞吐率,吞吐率是與并發(fā)數(shù)相關(guān)的,使請(qǐng)求總數(shù)相同,但如果并發(fā)數(shù)不一樣,吞吐率還是很可能有很大差異的 
  36. Time per request:       22902.310 [ms] (mean)    #用戶(hù)平均請(qǐng)求等待時(shí)間。也就是一次并發(fā)總的時(shí)間 
  37. Time per request:       45.805 [ms] (mean, across all concurrent requests)    #服務(wù)器平均請(qǐng)求等待時(shí)間。也就是一次請(qǐng)求(在本例中也就是500中的平均每一次)所需時(shí)間 
  38. Transfer rate:          10.32 [Kbytes/sec] received    #這些請(qǐng)求在單位時(shí)間內(nèi)從服務(wù)器獲取的數(shù)據(jù)長(zhǎng)度 
  39.  
  40. Connection Times (ms) 
  41.               min  mean[+/-sd] median   max 
  42. Connect:        9   46 460.5     11    9060 
  43. Processing:    25 20066 13796.4  14798   36549 
  44. Waiting:       14 16163 15029.9   8460   36484 
  45. Total:         37 20111 13785.1  22804   36562 
  46.  
  47. Percentage of the requests served within a certain time (ms) 
  48.   50%  22804     #50%用戶(hù)請(qǐng)求在22804ms內(nèi)返回 
  49.   66%  33043    #66%用戶(hù)請(qǐng)求在33043ms內(nèi)返回 
  50.   75%  34181 
  51.   80%  34791 
  52.   90%  35877 
  53.   95%  36416 
  54.   98%  36502    #98%用戶(hù)請(qǐng)求在36502ms內(nèi)返回 
  55.   99%  36512 
  56.  100%  36562 (longest request) 

命令參數(shù)參考:

  1. -n requests Number of requests to perform //本次測(cè)試發(fā)起的總請(qǐng)求數(shù) 
  2. -c concurrency Number of multiple requests to make   //一次產(chǎn)生的請(qǐng)求數(shù)(或并發(fā)數(shù)) 
  3. -t timelimit Seconds to max. wait for responses    //測(cè)試所進(jìn)行的最大秒數(shù),默認(rèn)沒(méi)有時(shí)間限制。 
  4. -r Don't exit on socket receive errors.    // 拋出異常繼續(xù)執(zhí)行測(cè)試任務(wù) 
  5. -p postfile File containing data to POST  //包含了需要POST的數(shù)據(jù)的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 
  6. -T content-type Content-type header for POSTing 
  7. //POST數(shù)據(jù)所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p) 
  8. -v verbosity How much troubleshooting info to print 
  9. //設(shè)置顯示信息的詳細(xì)程度 – 4或更大值會(huì)顯示頭信息, 3或更大值可以顯示響應(yīng)代碼(404, 200等), 2或更大值可以顯示警告和其他信息。 -V 顯示版本號(hào)并退出。 
  10. -C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable
  11. //-C cookie-name=value 對(duì)請(qǐng)求附加一個(gè)Cookie:行。 其典型形式是name=value的一個(gè)參數(shù)對(duì)。此參數(shù)可以重復(fù),用逗號(hào)分割。 
  12. 提示:可以借助session實(shí)現(xiàn)原理傳遞 JSESSIONID參數(shù), 實(shí)現(xiàn)保持會(huì)話(huà)的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。 
  13. -w Print out results in HTML tables  //以HTML表的格式輸出結(jié)果。默認(rèn)時(shí),它是白色背景的兩列寬度的一張表。 

2.5 使用注意

1、MAC中自帶了Apache。

2、在使用ab命令時(shí),并發(fā)了過(guò)高會(huì)出現(xiàn)錯(cuò)誤:Too many open files,由于系統(tǒng)打開(kāi)文件數(shù)量限制了具有輕量化特點(diǎn)的bench還是很適合中小企業(yè)使用,尤其在于模擬訪(fǎng)問(wèn)頁(yè)面的多機(jī)測(cè)試

三、JMeter:Apache組織開(kāi)發(fā)的壓力測(cè)試工具(使用比較多的工具)

3.1 簡(jiǎn)介

Apache JMeter是一款純java編寫(xiě)負(fù)載功能測(cè)試和性能測(cè)試開(kāi)源工具軟件。相比Loadrunner而言,JMeter小巧輕便且免費(fèi),逐漸成為了主流的性能測(cè)試工具,是每個(gè)測(cè)試人員都必須要掌握的工具之一

JDK版本:1.8 運(yùn)行環(huán)境:Windows 7 64 JMeter版本:3.3

注意:安裝JMeter需要 Java8和8以上的JDK版本

3.2 JDK安裝(如果已經(jīng)安裝JDK 1.8 忽略這一步)

1、jdk官網(wǎng)下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、選擇 Java SE 8u231,點(diǎn)擊JDK下載

安裝下載的JDK

配置系統(tǒng)環(huán)境變量 具體可以自行查找資料,這里就不做過(guò)多描述

3.2 JMeter安裝

1、官網(wǎng)下載地址:JMeter地址:http://jmeter.apache.org/download_jmeter.cgi

2、下載最新JMeter 5.1.1 版本:Apache JMeter 5.1.1 (Requires Java 8+)

3、下載完成后解壓zip包,雙擊bin目錄下jmeter.bat文件

3.3 JMeter 使用

1、雙擊bin目錄下jmeter.bat文件后,打開(kāi)Apache JMeter工具

2、案例測(cè)試(Test Plan - > Add - > Thread(User) - > Thread Group)

3、設(shè)置名稱(chēng)和線(xiàn)程數(shù)

線(xiàn)程參數(shù)解讀:Number of Threads (users):虛擬用戶(hù)數(shù)(也就是線(xiàn)程數(shù)),一個(gè)虛擬用戶(hù)占用一個(gè)進(jìn)程或線(xiàn)程Ramp-Up Period(in seconds):準(zhǔn)備時(shí)長(zhǎng),設(shè)置的虛擬用戶(hù)數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)。

Loop Count:循環(huán)次數(shù)每個(gè)線(xiàn)程發(fā)送請(qǐng)求的次數(shù)

如果線(xiàn)程數(shù)為20,循環(huán)次數(shù)為100,那么每個(gè)線(xiàn)程發(fā)送100次請(qǐng)求。總請(qǐng)求數(shù)為20*100=2000 。

如果勾選了“Forever”,那么所有線(xiàn)程會(huì)一直發(fā)送請(qǐng)求,一到選擇停止運(yùn)行腳本。

Delay Thread creation until needed:直到需要時(shí)延遲線(xiàn)程的創(chuàng)建

Scheduler:調(diào)度器,設(shè)置線(xiàn)程組啟動(dòng)的開(kāi)始時(shí)間和結(jié)束時(shí)間(配置調(diào)度器時(shí),需要勾選循環(huán)次數(shù)為永遠(yuǎn))

Duration(Seconds):持續(xù)時(shí)間(秒),測(cè)試持續(xù)時(shí)間,會(huì)覆蓋結(jié)束時(shí)間

Startup delay(Seconds):?jiǎn)?dòng)延遲(秒),測(cè)試延遲啟動(dòng)時(shí)間,會(huì)覆蓋啟動(dòng)時(shí)間

4、添加Http請(qǐng)求

右鍵點(diǎn)擊,Htto請(qǐng)求 > Add > Sampler > Http Request

接下來(lái)我們對(duì)接口 https://www.baidu.com/s?ie=UTF-8&wd=edg進(jìn)行性能測(cè)試,如下圖所示:

請(qǐng)求參數(shù)詳解:

  • Web Server(Http服務(wù)): 1、Protocol[http]:協(xié)議,向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求協(xié)議,可以是HTTP或HTTPS,默認(rèn)為HTTP 2、服務(wù)器名稱(chēng)或IP:HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)(域名)或IP 3、Port Number:端口號(hào)
  • Http Reuqeset(Http請(qǐng)求體): 1、Method:請(qǐng)求方法類(lèi)型,有GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等 2、path:目標(biāo)URL路徑,除去服務(wù)器地址、端口和請(qǐng)求參數(shù)后所得到的數(shù)據(jù) 3、Content encoding:編碼方式,設(shè)置為 UTF-8
  • 請(qǐng)求參數(shù): 設(shè)置請(qǐng)求參數(shù),都在下面的列表中進(jìn)行設(shè)置,
  • 列表參數(shù)解讀:Name:請(qǐng)求參數(shù)名 Value:請(qǐng)求值 URL Encode:是否Url編碼 Conten-Type:內(nèi)容類(lèi)型,有需要自行調(diào)整(一般選擇默認(rèn)即可) include Equals:是否包含等于

注意:參數(shù)傳入中文時(shí)需要勾選“URL Encode”

這里的按鈕都是針對(duì)列表中的數(shù)據(jù)進(jìn)行操作的

  1. Detail 
  2. :查看參數(shù)詳情 
  3.  
  4. Add 
  5. :添加一行列表請(qǐng)求參數(shù) 
  6.  
  7. Delte 
  8. :刪除一行數(shù)據(jù) 
  9.  
  10. Up 
  11. :設(shè)置列表參數(shù)上移 
  12.  
  13. Down 
  14. :設(shè)置列表參數(shù)下移 
  15.  
  16. add from  
  17. Clipdoard 
  18. :從我們復(fù)制的內(nèi)容中進(jìn)行添加 

 

5、添加察看結(jié)果樹(shù)

1、右鍵點(diǎn)擊 Http請(qǐng)求 > Add > Listener > View Results Tree

2、這里我們?cè)O(shè)置響應(yīng)數(shù)據(jù)格式:HTMLSourceFormatted,點(diǎn)擊運(yùn)行我們就可以看到請(qǐng)求結(jié)果

3、本次搜索返回結(jié)果頁(yè)面標(biāo)題為 edg_百度搜索

6、添加用戶(hù)自定義變量

1、添加用戶(hù)自定義變量用以Http請(qǐng)求參數(shù)化:Http請(qǐng)求 > Add > Config Element > User Defined Variables

2、新增請(qǐng)求參數(shù),存放搜索關(guān)鍵字

3、在 Http測(cè)試請(qǐng)求 中使用該參數(shù),格式為:${wd} ,如下圖所示

7、添加響應(yīng)斷言

右鍵點(diǎn)擊 Http測(cè)試請(qǐng)求(注意是Http測(cè)試請(qǐng)求) > Add > Assertions > Response Assertion

校驗(yàn)返回的文本中是否包含搜索詞,添加參數(shù)${wd}到要測(cè)試的模式中

  1. Contains 
  2. :包括 
  3.  
  4. Matches 
  5. :匹配 
  6.  
  7. Equals 
  8. :相等 
  9.  
  10. SubString 
  11. :原諒博主才疏學(xué)淺,這個(gè)就不做解釋了 
  12.  
  13. Not 
  14. :否 
  15.  
  16. or 
  17. :或者 

 

7、添加響應(yīng)斷言結(jié)果

右鍵點(diǎn)擊 Http測(cè)試請(qǐng)求 > Add > Listener > Assertion Results

點(diǎn)擊運(yùn)行,查詢(xún)運(yùn)行結(jié)果

8、添加聚合報(bào)告

右鍵點(diǎn)擊 Http請(qǐng)求 > Add > Listener > Aggregate Report

到這里我們就完成了一個(gè)完整的Http接口的性能測(cè)試編寫(xiě),接下來(lái)我們會(huì)對(duì)它的性能進(jìn)行測(cè)試

3.4 JMeter 性能測(cè)試

1、配置Http請(qǐng)求(線(xiàn)程組)信息

點(diǎn)擊Http請(qǐng)求(線(xiàn)程組),配置相關(guān)的性能測(cè)試相關(guān)參數(shù)線(xiàn)程數(shù):50 循環(huán)次數(shù):永遠(yuǎn)持續(xù)時(shí)間:60秒

2、執(zhí)行測(cè)試信息

選擇聚合報(bào)告,查詢(xún)結(jié)構(gòu),點(diǎn)擊 箭頭 按鈕啟動(dòng)測(cè)試,如果要清楚具體內(nèi)容,點(diǎn)擊小掃把,清除調(diào)試結(jié)果

3、測(cè)試結(jié)果分析解讀

1、打開(kāi)聚合報(bào)告

參數(shù)詳解:

  1. Label:每個(gè) JMeter 的 element都有一個(gè) Name 屬性,這里顯示的是 Name 屬性的值
  2. #Samples:請(qǐng)求數(shù)——表示這次測(cè)試中一共發(fā)出了多少個(gè)請(qǐng)求 如果模擬10個(gè)用戶(hù),每個(gè)用戶(hù)迭代10次,那么這里顯示100
  3. Average:平均響應(yīng)時(shí)間——默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間 當(dāng)使用了 Transaction Controller 時(shí),以Transaction 為單位顯示平均響應(yīng)時(shí)間
  4. Median:中位數(shù),也就是 50% 用戶(hù)的響應(yīng)時(shí)間
  5. 90% Line:90% 用戶(hù)的響應(yīng)時(shí)間
  6. 99% Line:99% 用戶(hù)的響應(yīng)時(shí)間
  7. Min:最小響應(yīng)時(shí)間
  8. Max:最大響應(yīng)時(shí)間
  9. Error%:錯(cuò)誤率——錯(cuò)誤請(qǐng)求數(shù)/請(qǐng)求總數(shù)
  10. Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)(Request per Second) 當(dāng)使用了TransactionController時(shí),也可以表示類(lèi)似LoadRunner的TransactionperSecond數(shù)
  11. KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量在實(shí)際中我們需要關(guān)注的點(diǎn)只有—— #Samples 請(qǐng)求數(shù),Average 平均響應(yīng)時(shí)間,Min 最小響應(yīng)時(shí)間,Max 最大響應(yīng)時(shí)間,Error% 錯(cuò)誤率和Throughput 吞吐量

四、代碼模擬

1、Semaphore

Semaphore是計(jì)數(shù)信號(hào)量。Semaphore管理一系列許可證。每個(gè)acquire方法阻塞,直到有一個(gè)許可證可以獲得然后拿走一個(gè)許可證;每個(gè)release方法增加一個(gè)許可證,這可能會(huì)釋放一個(gè)阻塞的acquire方法。然而,其實(shí)并沒(méi)有實(shí)際的許可證這個(gè)對(duì)象,Semaphore只是維持了一個(gè)可獲得許可證的數(shù)量。

[[400341]]

1.1 代碼演示:獲取一個(gè)許可證

  1. import lombok.extern.slf4j.Slf4j; 
  2.  
  3. import java.util.concurrent.CountDownLatch; 
  4. import java.util.concurrent.ExecutorService; 
  5. import java.util.concurrent.Executors; 
  6. import java.util.concurrent.Semaphore; 
  7.  
  8. @Slf4j 
  9. public class SemaphoreExample1 { 
  10.  
  11.     private final static int threadCount = 20; 
  12.  
  13.     public static void main(String[] args) throws Exception { 
  14.  
  15.         ExecutorService exec = Executors.newCachedThreadPool(); 
  16.  
  17.         final Semaphore semaphore = new Semaphore(3); 
  18.  
  19.         for (int i = 0; i < threadCount; i++) { 
  20.             final int threadNum = i; 
  21.             exec.execute(() -> { 
  22.                 try { 
  23.                     semaphore.acquire(); // 獲取一個(gè)許可 
  24.                     test(threadNum); 
  25.                     semaphore.release(); // 釋放一個(gè)許可 
  26.                 } catch (Exception e) { 
  27.                     log.error("exception", e); 
  28.                 } 
  29.             }); 
  30.         } 
  31.         exec.shutdown(); 
  32.     } 
  33.  
  34.     private static void test(int threadNum) throws Exception { 
  35.         log.info("{}", threadNum); 
  36.         Thread.sleep(1000); 
  37.     } 

執(zhí)行結(jié)果:如下圖所示,我們看到雖然結(jié)果是無(wú)序的,但是請(qǐng)求的線(xiàn)程數(shù)量是正確的,這里展示的是獲取一個(gè)許可,同時(shí)也釋放一個(gè)許可,我們可不可以獲取多個(gè)許可,釋放多個(gè)許可呢,答案是可以的

1.2 代碼演示:獲取多個(gè)許可證

  1. package com.mmall.concurrency.example.aqs; 
  2.  
  3. import lombok.extern.slf4j.Slf4j; 
  4.  
  5. import java.util.concurrent.ExecutorService; 
  6. import java.util.concurrent.Executors; 
  7. import java.util.concurrent.Semaphore; 
  8.  
  9. @Slf4j 
  10. public class SemaphoreExample { 
  11.  
  12.     private final static int threadCount = 20; 
  13.  
  14.     public static void main(String[] args) throws Exception { 
  15.  
  16.         ExecutorService exec = Executors.newCachedThreadPool(); 
  17.  
  18.         final Semaphore semaphore = new Semaphore(3); 
  19.  
  20.         for (int i = 0; i < threadCount; i++) { 
  21.             final int threadNum = i; 
  22.             exec.execute(() -> { 
  23.                 try { 
  24.                     semaphore.acquire(3); // 獲取多個(gè)許可 
  25.                     test(threadNum); 
  26.                     semaphore.release(3); // 釋放多個(gè)許可 
  27.                 } catch (Exception e) { 
  28.                     log.error("exception", e); 
  29.                 } 
  30.             }); 
  31.         } 
  32.         exec.shutdown(); 
  33.     } 
  34.  
  35.     private static void test(int threadNum) throws Exception { 
  36.         log.info("{}", threadNum); 
  37.         Thread.sleep(1000); 
  38.     } 

執(zhí)行結(jié)果:這里我們看到我們?cè)O(shè)置了獲取多個(gè)許可同時(shí)也釋放多個(gè)許可,放回的線(xiàn)程數(shù)是正確的,同時(shí)執(zhí)行結(jié)果也是有序的

2、CountDownLatch

CountDownLatch是一個(gè)同步工具類(lèi),用來(lái)協(xié)調(diào)多個(gè)線(xiàn)程之間的同步,或者說(shuō)起到線(xiàn)程之間的通信(而不是用作互斥的作用)。CountDownLatch能夠使一個(gè)線(xiàn)程在等待另外一些線(xiàn)程完成各自工作之后,再繼續(xù)執(zhí)行。使用一個(gè)計(jì)數(shù)器進(jìn)行實(shí)現(xiàn)。計(jì)數(shù)器初始值為線(xiàn)程的數(shù)量。當(dāng)每一個(gè)線(xiàn)程完成自己任務(wù)后,計(jì)數(shù)器的值就會(huì)減一。當(dāng)計(jì)數(shù)器的值為0時(shí),表示所有的線(xiàn)程都已經(jīng)完成了任務(wù),然后在CountDownLatch上等待的線(xiàn)程就可以恢復(fù)執(zhí)行任務(wù)的

2.1 代碼演示:

  1. import lombok.extern.slf4j.Slf4j; 
  2.  
  3. import java.util.concurrent.CountDownLatch; 
  4. import java.util.concurrent.ExecutorService; 
  5. import java.util.concurrent.Executors; 
  6.  
  7. @Slf4j 
  8. public class CountDownLatchExample1 { 
  9.  
  10.     private final static int threadCount = 200; 
  11.     public static void main(String[] args) throws Exception { 
  12.         int num = 0; 
  13.  
  14.         ExecutorService exec = Executors.newCachedThreadPool(); 
  15.         final CountDownLatch countDownLatch = new CountDownLatch(threadCount); 
  16.  
  17.         for (int i = 0; i < threadCount; i++) { 
  18.             final int threadNum = i; 
  19.             num++; 
  20.             exec.execute(() -> { 
  21.                 try { 
  22.                     test(threadNum); 
  23.                 } catch (Exception e) { 
  24.                     log.error("exception", e); 
  25.                 } finally { 
  26.                     countDownLatch.countDown(); 
  27.                 } 
  28.             }); 
  29.         } 
  30.         countDownLatch.await(); 
  31.         log.info("finish——"+num); 
  32.         exec.shutdown(); 
  33.     } 
  34.  
  35.     private static void test(int threadNum) throws Exception { 
  36.         Thread.sleep(100); 
  37.         log.info("{}", threadNum); 
  38.         Thread.sleep(100); 
  39.     } 

  

通過(guò)返回結(jié)果我們可以看到,設(shè)置的線(xiàn)程數(shù)量返回結(jié)果數(shù)量和我們?cè)O(shè)置的線(xiàn)程數(shù)量200一致

五、總結(jié)

  • postMan:非專(zhuān)業(yè)的并發(fā)測(cè)試,嚴(yán)格來(lái)說(shuō)postMan并不是并發(fā)請(qǐng)求,而是串行執(zhí)行的,postMan更多的是用來(lái)測(cè)試Http連接的一個(gè)工具,是一個(gè)很實(shí)用的工具
  • Apache Bench:Apache Bench是 Apache 服務(wù)器自帶的一個(gè)web壓力測(cè)試工具,簡(jiǎn)稱(chēng)ab,ab工具小巧簡(jiǎn)單,上手學(xué)習(xí)較快,可以提供需要的基本性能指標(biāo),但是沒(méi)有圖形化結(jié)果,不能監(jiān)控
  • JMeter:Apache JMeter 是Apache 組織開(kāi)發(fā)的基于java的壓力測(cè)試工具。用于對(duì)軟件做壓力測(cè)試的工具,它可以用于測(cè)試靜態(tài)和動(dòng)態(tài)資源例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對(duì)象、 數(shù)據(jù)庫(kù), FTP 服務(wù)器等等

總的來(lái)說(shuō),并發(fā)測(cè)試中,JMeter和Apache Bench是比較好的選擇,由于Apache Bench是基于命令行的,ab處理速度更快,而Jmeter更準(zhǔn)確,由于Jmeter本身支持?jǐn)嘌浴⒖勺儏?shù)和CSV數(shù)據(jù)集的輸入,能設(shè)定更加靈活多變的的測(cè)試場(chǎng)景,至于postMan這款工具,用來(lái)最多的是用來(lái)模擬Http請(qǐng)求的一個(gè),并不是一個(gè)專(zhuān)業(yè)的并發(fā)請(qǐng)求工具。

 

責(zé)任編輯:姜華 來(lái)源: 牧小農(nóng)
相關(guān)推薦

2021-10-25 20:02:00

gRPC訂閱模式超時(shí)控制

2020-11-25 08:25:02

二叉樹(shù)樹(shù)節(jié)點(diǎn)

2025-01-14 08:32:55

2021-09-29 07:24:17

Linux程序系統(tǒng)

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫(kù)

2023-08-04 09:43:16

Socket編程Python

2024-03-26 07:58:12

Redis編程模型

2019-05-30 09:32:49

2020-08-03 13:59:12

LRU滴滴司機(jī)CPU

2024-12-05 08:58:20

類(lèi)加載JVMJava 虛擬機(jī)

2020-11-12 10:37:29

微服務(wù)

2019-09-11 14:40:44

數(shù)據(jù)清洗數(shù)據(jù)分析數(shù)據(jù)類(lèi)型

2022-04-14 10:10:59

Nginx開(kāi)源Linux

2019-10-31 09:48:53

MySQL數(shù)據(jù)庫(kù)事務(wù)

2019-01-30 13:44:34

JVM內(nèi)存服務(wù)器

2021-04-27 07:59:11

內(nèi)聯(lián)匯編 C 語(yǔ)言 asm 關(guān)鍵字

2023-09-22 07:52:16

HDMI 2.14K HDR游戲

2017-03-30 22:41:55

虛擬化操作系統(tǒng)軟件

2020-11-17 07:43:24

互聯(lián)網(wǎng)MVC服務(wù)類(lèi)

2019-11-05 14:06:07

MySQLB+索引
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品一区二区免费| 一区二区三区美女xx视频| 国产乱人伦精品一区二区三区| 国产三级精品在线观看| 狠狠爱www人成狠狠爱综合网| 日韩免费观看高清完整版| a级黄色一级片| lutube成人福利在线观看| 捆绑紧缚一区二区三区视频| 色综合久久精品亚洲国产| 久久久久久久无码| 精品肉辣文txt下载| 亚洲色图制服丝袜| 久久艳妇乳肉豪妇荡乳av| 一区二区日韩在线观看| 亚洲人体大胆视频| 日韩在线国产精品| 视频免费在线观看| 日本精品久久| 欧美色欧美亚洲高清在线视频| 亚洲欧洲另类精品久久综合| 污视频软件在线观看| 久久av资源网| 日韩美女视频免费在线观看| 欧美成人免费观看视频 | 成人国产精品一区二区| 欧美激情亚洲综合| 国产精品jizz在线观看美国| 中文字幕亚洲字幕| 亚洲熟妇一区二区三区| xxxxxhd亚洲人hd| 欧美日韩精品一区二区三区四区| 青青草视频在线免费播放| 成人片在线看| 国产精品天天摸av网| 精品在线视频一区二区| www.污视频| 精品无人码麻豆乱码1区2区| 国产精品第一第二| 91精品国产综合久久久蜜臀九色| 黄色av日韩| 精品中文字幕在线2019| 91香蕉一区二区三区在线观看| 亚洲调教一区| 亚洲精品电影在线| 在线看黄色的网站| 成人自拍在线| 欧美成人性福生活免费看| 五月六月丁香婷婷| 亚洲免费看片| 欧美顶级少妇做爰| 久久精品亚洲天堂| 日韩高清二区| 精品三级av在线| 欧美熟妇另类久久久久久多毛| 亚洲精品自拍| 欧美一区二区在线播放| 日本中文字幕在线不卡| 国产亚洲观看| 日韩午夜激情av| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲精品无遮挡| 国产a级毛片一区| 成人国产1314www色视频| 性欧美videos另类hd| 国产.欧美.日韩| 国产精品久久九九| 色屁屁草草影院ccyycom| 99国产一区二区三精品乱码| 国产伦精品一区二区三毛| 丰满少妇被猛烈进入| 成人av中文字幕| 精品国产乱码久久久久久郑州公司| 女人18毛片水真多18精品| 99久久久久久| 日韩三级免费观看| 佐山爱在线视频| 超碰精品在线观看| 亚洲精品国产拍免费91在线| 欧美bbbbb性bbbbb视频| 九色精品91| 中文字幕综合在线| 波多野结衣家庭教师| 国产尤物精品| 日韩av电影手机在线观看| 欧美成人一区二区视频| 九色综合国产一区二区三区| av激情久久| 欧美伦理影视网| 国产精品人妖ts系列视频| 激情图片qvod| а√天堂中文在线资源8| 91高清视频免费看| 欧美性受xxxx黒人xyx性爽| 精品按摩偷拍| 中文亚洲视频在线| 久久久久久免费观看| 久久久久国产精品午夜一区| 成人免费xxxxx在线观看| 天天操天天干天天爱| 国产精品全国免费观看高清| 免费人成自慰网站| 巨胸喷奶水www久久久| 日韩精品一区二区三区在线| 美女爆乳18禁www久久久久久| 自拍偷拍欧美专区| 国产成人一区三区| 亚洲狼人综合网| 国产精品嫩草久久久久| 免费一级特黄毛片| 精品国产欧美| 中文字幕亚洲国产| 久久99精品波多结衣一区| 国产在线播放一区| 天天人人精品| 在线观看v片| 日韩三级在线免费观看| 国产福利在线导航| 美女日韩在线中文字幕| 91久久久一线二线三线品牌| www.黄在线观看| 欧美日韩精品中文字幕| 色欲欲www成人网站| 成人看的羞羞网站| 538国产精品一区二区免费视频| 国产露脸91国语对白| 日本一区二区三区在线观看| 欧美日本视频在线观看| 中文字幕视频精品一区二区三区| 夜夜躁日日躁狠狠久久88av| 好吊操这里只有精品| 国产精品自拍毛片| 在线观看欧美亚洲| 精品久久在线| 中文字幕av一区二区| 男人的天堂av网站| 91网站黄www| 国产婷婷一区二区三区| 一区二区三区视频播放| 久久久精品一区| 97超碰国产在线| 亚洲国产精品成人综合色在线婷婷| 欧美国产亚洲一区| 久久香蕉精品香蕉| 97视频免费观看| 亚洲av成人精品毛片| 偷拍亚洲欧洲综合| 精品人妻一区二区三区日产| 激情久久婷婷| 国产欧美一区二区三区另类精品 | 丰满少妇在线观看| 国产乱码精品一区二区亚洲| 欧美专区在线视频| 免费在线性爱视频| 在线精品视频免费播放| 一区二区伦理片| 青青草成人在线观看| 日韩三级电影| 久久精品超碰| 久久影院免费观看| 亚洲精品综合网| 精品电影在线观看| 在线 丝袜 欧美 日韩 制服| 久久久久久久尹人综合网亚洲| 麻豆精品蜜桃一区二区三区| 欧美日韩五码| www国产精品视频| 国产人妖在线播放| 亚洲国产视频在线| 亚洲观看黄色网| 日韩 欧美一区二区三区| 少妇精品久久久久久久久久| 亚洲在线资源| 欧美大奶子在线| 天天操天天干天天舔| 色婷婷亚洲婷婷| 在线日韩国产网站| 国产v日产∨综合v精品视频| 97国产在线播放| av亚洲在线观看| 亚洲a成v人在线观看| 超黄网站在线观看| 亚洲欧洲一区二区三区在线观看| 国产免费www| 亚洲欧美另类小说视频| 老司机免费视频| 日韩福利视频导航| 精品免费久久久久久久| 日韩精品免费一区二区夜夜嗨 | 国产清纯白嫩初高生在线观看91| 亚洲综合婷婷久久| 亚洲国产精品一区| 亚洲精品日韩成人| 8x国产一区二区三区精品推荐| 欧美在线中文字幕| 国产激情在线| 亚洲精品网址在线观看| av中文字幕免费在线观看| 欧美午夜激情在线| 在线免费观看亚洲视频| 2024国产精品| 无码人妻少妇色欲av一区二区| 亚洲欧美清纯在线制服| 最新国产精品久久| 久久91精品| 91国产在线免费观看| 新片速递亚洲合集欧美合集| 久久999免费视频| 成年人视频在线看| 亚洲精品成人久久电影| 国产片在线播放| 欧洲在线/亚洲| 日本中文字幕免费| 亚洲精品国久久99热| 欧美做受xxxxxⅹ性视频| 国产不卡视频一区| 在线黄色免费看| 日本中文一区二区三区| 极品美女扒开粉嫩小泬| 欧美一区视频| 在线电影看在线一区二区三区| 亚洲人成网77777色在线播放| 99精彩视频在线观看免费| 色猫猫成人app| 91tv亚洲精品香蕉国产一区7ujn| 在线āv视频| 北条麻妃久久精品| caoporn国产精品免费视频| 日韩成人久久久| 丰满大乳国产精品| 欧美一区二区网站| 国产精品久久久久久69| 欧美在线视频你懂得| 黄色片中文字幕| 欧美特级www| 国产午夜性春猛交ⅹxxx| 亚洲成人精品一区| 久久久久亚洲av成人片| 一区二区国产视频| 欧美丰满艳妇bbwbbw| 亚洲免费色视频| 一区二区三区影视| 亚洲图片激情小说| 欧美黄色aaa| 亚洲欧美激情在线| 真实国产乱子伦对白在线| 亚洲欧美激情一区二区| 538精品在线观看| 亚洲精品高清视频在线观看| 国产精品国产精品88| 亚洲激情欧美激情| 久久久久久久久艹| 亚洲第一成年网| 天天综合天天干| 色悠悠久久综合| 中国a一片一级一片| 欧美三级电影网| 国产精品日韩无码| 日韩欧美国产系列| 欧美一级片免费| 亚洲精品有码在线| 成人性生交大片免费看午夜| 中文字幕九色91在线| 欧美精品电影| 美女视频黄免费的亚洲男人天堂| 羞羞视频在线观看免费| 久久免费精品视频| 粉嫩一区二区| 国产精品嫩草影院久久久| 99久久99九九99九九九| 成人免费看片网站| 欧美一级色片| 先锋在线资源一区二区三区| 91精品99| 欧美精品自拍视频| 视频一区在线视频| 成人av毛片在线观看| 成人性生交大合| 国产激情在线免费观看| 国产精品国产自产拍高清av王其| 欧美性猛交xxxxx少妇| 午夜电影一区二区| 五月天中文字幕| 欧美一区二区三区公司| 亚洲人成色777777老人头| 中文欧美在线视频| 日韩免费影院| 日本电影亚洲天堂| 99精品女人在线观看免费视频| 国产视频一区二区三区四区| 欧美人与牛zoz0性行为| 热这里只有精品| 亚洲永久视频| 手机看片国产精品| 久久久久国产精品免费免费搜索| 国内毛片毛片毛片毛片毛片| 亚洲成av人**亚洲成av**| 免费看av在线| 亚洲大胆美女视频| 午夜视频在线免费观看| 97视频在线播放| 伊人久久大香线蕉综合影院首页| 国产麻豆一区二区三区在线观看| 日韩久久综合| 黄色av网址在线播放| 国产一区二区电影| 日韩中文字幕有码| 亚洲成av人片一区二区三区| 岳乳丰满一区二区三区| 日韩av中文字幕在线免费观看| 激情影院在线观看| 日韩免费观看在线观看| a看欧美黄色女同性恋| 伊人婷婷久久| 三级一区在线视频先锋| 中文字幕一区二区人妻电影丶| 日韩一区有码在线| 国产午夜无码视频在线观看 | 国产无套精品一区二区三区| 国产精品乱人伦| 美女又爽又黄免费视频| 精品久久久久久久久久久久久久久久久 | 久久久久成人精品| 免费视频成人| 水蜜桃亚洲一二三四在线| 国产欧美高清| 五月天丁香社区| 夜夜嗨av一区二区三区四季av| 一级日韩一级欧美| 一区二区三区动漫| 免费观看一级欧美片| 国内视频一区| 亚洲国产高清一区二区三区| 欧美性猛交xx| 亚洲综合丁香婷婷六月香| 国产人妖在线播放| 久久亚洲精品一区| 亚洲网站免费| 中文字幕一区二区三区在线乱码| 日韩精品一级中文字幕精品视频免费观看 | 九九99久久精品在免费线bt| 亚洲一区二区三区四区中文| 日本成人在线不卡视频| 性欧美一区二区| 欧美在线播放高清精品| 国产小视频免费在线网址| 欧美怡红院视频一区二区三区| 女同另类激情重口| 亚洲自偷自拍熟女另类| 91丨九色porny丨蝌蚪| 国产高清中文字幕| 亚洲欧美一区二区精品久久久| 午夜影院在线播放| 蜜桃狠狠色伊人亚洲综合网站| 亚洲主播在线| 国产伦理片在线观看| 欧美日本一道本| 国产激情在线观看| 99伊人久久| 亚洲国产网站| 泷泽萝拉在线播放| 色婷婷av一区二区三区大白胸| 福利在线播放| 91久久久久久久久久久久久| 欧美日韩岛国| 人妻无码中文久久久久专区| 色综合咪咪久久| 91涩漫在线观看| 91在线精品视频| 亚洲精品九九| 日韩人妻无码精品综合区| 欧美日韩国产综合一区二区 | 亚洲一级电影视频| 亚洲av成人精品日韩在线播放| 国产精品盗摄久久久| 欧美影视一区| 亚洲最大免费视频| 欧美三区在线观看| 中文字幕中文字幕在线十八区 | 日韩人在线观看| 免费网站免费进入在线| 97夜夜澡人人双人人人喊| 国产日韩一区二区三区在线播放| 真实乱视频国产免费观看| 欧美精品v国产精品v日韩精品| 秋霞在线视频| 欧美精品七区| 国产在线视视频有精品| 国产精品免费av一区二区| 中文字幕av日韩| 久久av国产紧身裤| 午夜免费看视频| 亚洲成人av一区| 精品自拍一区| 免费一区二区三区| 国产成人午夜99999| 国产精品免费无遮挡无码永久视频| 欧美xxxx综合视频| 国产欧美日韩影院| 精品国产乱码久久久久夜深人妻|