精品欧美一区二区三区在线观看 _久久久久国色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)

国产一级片91| 国产精品自拍偷拍| 久久精品综合视频| 国产精品亚洲一区二区三区在线观看| 欧美国产日韩a欧美在线观看| 国产在线久久久| 日韩 欧美 亚洲| 日韩欧美国产精品综合嫩v| 日韩午夜av一区| 茄子视频成人免费观看| 精品视频在线一区二区| av一区二区久久| 成人国产在线视频| 国产又黄又猛又粗又爽| 日韩欧美高清在线播放| 亚洲精品国产品国语在线| www.精品在线| 少妇淫片在线影院| 亚洲欧美aⅴ...| 欧美日韩在线一二三| 亚洲黄色在线免费观看| 麻豆国产精品官网| 日本亚洲欧美三级| 久久久久黄色片| 日韩黄色大片网站| 精品亚洲aⅴ在线观看| 亚洲三级在线视频| 久久天堂影院| 欧美性猛交xxxx久久久| 人妻夜夜添夜夜无码av| 精品麻豆一区二区三区| 国产精品美女久久福利网站| 热re99久久精品国产99热| 欧美一级免费片| 国产成人av电影| 成人黄色免费网站在线观看| 在线免费一区二区| 亚洲一区欧美激情| 久久久免费av| 日本污视频在线观看| 欧美日韩日本国产亚洲在线 | 亚洲午夜精品一区二区国产| 亚洲午夜久久久影院| 午夜一区二区三区免费| 精品素人av| 亚洲国产99精品国自产| 日本人添下边视频免费| 伊人久久亚洲| 精品国产乱码久久久久久图片| 精品国产乱码久久久久久1区二区| 97成人超碰| 欧美色老头old∨ideo| 国产熟人av一二三区| 中文在线免费二区三区| 都市激情亚洲色图| 久久久久久久激情| videos性欧美另类高清| 色琪琪一区二区三区亚洲区| 国产精品宾馆在线精品酒店| 鲁鲁在线中文| 色综合久久久久久久久| 久久久久狠狠高潮亚洲精品| 色尼玛亚洲综合影院| 色噜噜狠狠色综合中国| 午夜免费福利在线| 日韩在线电影| 欧美一二三四在线| 好吊操视频这里只有精品| 爱爱精品视频| 亚洲裸体xxxx| 国产精品麻豆免费版现看视频| 久久在线电影| 欧美成人精品一区| 国产污视频在线看| 欧美亚洲在线| 成人在线免费网站| 黄页网站免费观看| 亚洲高清在线| 日本成人在线视频网址| 精品无码一区二区三区的天堂| 日韩专区一卡二卡| 国产欧美日韩中文| 免费一级特黄毛片| 国产无套内射又大又猛又粗又爽 | 9色porny自拍视频一区二区| 精品在线观看一区二区| 国产在线播放av| 日韩一区在线播放| 黄色国产一级视频| 蜜桃成人精品| 日韩精品一区二区三区在线播放 | 亚洲成a人v欧美综合天堂下载| 欧美啪啪免费视频| 99久久婷婷国产综合精品首页| 欧美精品在线一区二区三区| 国产chinese中国hdxxxx| 夜夜春成人影院| 久久久精品2019中文字幕神马| 日本少妇做爰全过程毛片| 日韩国产精品91| 国产精品9999久久久久仙踪林| 日本大片在线观看| 亚洲同性gay激情无套| 男女啪啪免费视频网站| 国产美女免费网站| 一区二区电影免费观看| 欧美福利一区二区| 天堂久久久久久| 888久久久| 青青久久av北条麻妃黑人| 999精品国产| 国产日韩欧美不卡| 日韩极品视频在线观看| 欧美aaa大片视频一二区| 精品国产一区二区在线观看| 久久久久亚洲AV成人无在 | 日本十八禁视频无遮挡| 四虎成人精品一区二区免费网站| 日韩av在线电影网| a级片在线观看免费| 喷水一区二区三区| 欧美人xxxxx| caoporn视频在线| 宅男噜噜噜66一区二区66| 公侵犯人妻一区二区三区| 精品1区2区3区4区| 亚洲xxxxx性| 在线激情免费视频| 91精品91久久久中77777| 精品无码av一区二区三区| 久久亚洲专区| 国产欧美va欧美va香蕉在| 青青视频在线观| 午夜精品久久久久| 性高潮免费视频| 综合久久综合| 69174成人网| 国产在线观看av| 欧美日韩国产综合视频在线观看| 成人午夜剧场视频网站| 午夜在线观看免费一区| 国产自产在线视频一区| aa级大片免费在线观看| 精品日韩在线一区| 欧美成人一二三区| 国产乱一区二区| 欧美精品久久96人妻无码| 日韩一区中文| 久久久999精品免费| 日韩成人在线资源| 日韩电影网址| 欧美视频免费在线| 成人网站免费观看| 久久aⅴ国产紧身牛仔裤| 好吊色欧美一区二区三区| caoporn-草棚在线视频最| 精品国产sm最大网站免费看| 国产一级淫片免费| 成a人片亚洲日本久久| 免费av观看网址| 香蕉一区二区| 国产成人极品视频| 自拍视频在线| 欧美乱妇20p| 天海翼在线视频| 国产一区二区91| 青青在线视频免费观看| 国产欧美自拍一区| 18久久久久久| 成年人在线观看网站| 欧美日韩精品一区二区三区四区 | 国产精品久久久久福利| 日本暖暖在线视频| 日韩精品专区在线影院观看| 黄色片视频网站| 久久久综合网站| 亚洲欧美国产中文| 午夜久久美女| 女人一区二区三区| 只有精品亚洲| 国内精品一区二区三区四区| 欧洲毛片在线| 欧美另类变人与禽xxxxx| 欧美国产日韩综合| 久久久久99精品一区| 中文字幕免费高清在线| 欧美日韩四区| 欧美日韩亚洲在线| 亚洲一区二区av| 97国产精品久久| 97人人在线| 欧美精品一区二区三区久久久| 亚洲日本视频在线观看| 国产精品久久二区二区| 亚洲乱妇老熟女爽到高潮的片 | 欧美日韩视频在线| 国产精品综合激情| 国产又粗又猛又爽| 亚洲同性gay激情无套| 欧美双性人妖o0| 麻豆成人综合网| 男人日女人bb视频| 亚洲精品久久久| 欧美日韩国产精品一区二区| 久久精品九色| 日韩美女视频中文字幕| 国产丝袜视频在线播放| 综合久久五月天| 亚洲欧美丝袜中文综合| 欧美一级日韩一级| 国产视频1区2区| 亚洲一区二区av电影| 极品久久久久久久| 91麻豆蜜桃一区二区三区| 亚洲自拍第三页| 日韩av二区在线播放| 亚洲国产成人精品无码区99| 天天综合网91| 少妇精品久久久久久久久久| 国产精品毛片av| 91免费版网站在线观看| 欧美日韩伦理一区二区| 欧美综合在线第二页| 三级网站视频在在线播放| 中文字幕亚洲欧美在线| 国产在线一二三区| 日韩av在线直播| 欧美 日韩 国产 成人 在线 91| 欧美日本在线视频| 国模私拍一区二区| 色综合色综合色综合| 久久狠狠高潮亚洲精品| 亚洲最大色网站| 国产1区2区3区4区| 亚洲视频一区二区在线观看| 国产精品天天干| 国产亚洲一区二区三区四区| www.色多多| 99精品欧美一区| 国产激情第一页| 成人h精品动漫一区二区三区| 日本黄色www| 国产一区二区三区美女| 五月天开心婷婷| 另类成人小视频在线| 视色视频在线观看| 久久99久久99小草精品免视看| 中文字幕在线观看第三页| 日本中文字幕一区二区视频| 超碰在线人人爱| 美女网站色91| 亚洲制服中文字幕| 国产麻豆精品久久一二三| 手机看片国产精品| 婷婷综合激情网| 香蕉成人伊视频在线观看| 久久久精品99| 午夜精品久久久久久久久久久 | 99久久人妻无码中文字幕系列| 成人国产免费视频| 中文字幕乱码在线| 久久亚洲精精品中文字幕早川悠里 | 中文字幕视频网| 日本精品一级二级| 中文字幕a级片| 欧美一区二区三区啪啪| 性生活免费网站| 亚洲精品美女在线| 成人高清在线| 欧美精品在线网站| 多野结衣av一区| 国产精品成人播放| 99精品视频在线免费播放| av成人观看| 日本欧美高清| 午夜一区二区三区| 欧美午夜久久| 欧美私人情侣网站| 久久99日本精品| 日本不卡视频一区| 久久精品一区二区三区av| 国产精品久久国产精麻豆96堂| 亚洲猫色日本管| 成人午夜淫片100集| 欧美人牲a欧美精品| 欧美一级一区二区三区| 亚洲石原莉奈一区二区在线观看| a级毛片免费观看在线| 97人洗澡人人免费公开视频碰碰碰| 第四色男人最爱上成人网| 3d蒂法精品啪啪一区二区免费| 天美av一区二区三区久久| 男人的天堂成人| 麻豆久久婷婷| 少妇性l交大片7724com| 国产丝袜欧美中文另类| 久久久久久久极品内射| 91极品视觉盛宴| 欧美一级一区二区三区| 日韩三级影视基地| 妞干网免费在线视频| 91久久久在线| av中文字幕一区二区| 91成人综合网| 美日韩一级片在线观看| 国产精品无码毛片| 亚洲日本欧美天堂| 波多野结衣在线观看视频| 精品国产伦理网| 国产在线观看91| 国产精品白嫩美女在线观看| 第四色中文综合网| 黄色污污在线观看| 青青青爽久久午夜综合久久午夜| 欧美激情欧美激情在线五月| 97在线观看免费观看高清| 69久久夜色精品国产69| 久久久久久亚洲精品美女| 日韩精品欧美一区二区三区| 日韩视频免费| 波多野结衣三级视频| 一色桃子久久精品亚洲| 99精品人妻国产毛片| 亚洲第一天堂av| 色婷婷av在线| 亚洲999一在线观看www| 日韩情爱电影在线观看| 50路60路老熟妇啪啪| 9色porny自拍视频一区二区| 精品深夜av无码一区二区老年| 欧美二区在线观看| 国产高清美女一级毛片久久| 欧美在线观看网站| 日韩a级大片| 国产精品专区在线| 成人一道本在线| 青青草精品在线视频| 欧美日韩在线观看一区二区| 韩国福利在线| 国产不卡精品视男人的天堂| 天堂俺去俺来也www久久婷婷 | 欧美成人女星排名| а√天堂官网中文在线| 91精品在线看| 综合久久婷婷| 又色又爽又黄18网站| 一区二区三区四区高清精品免费观看| 国产精品欧美亚洲| 久久天天躁日日躁| 视频一区在线| 免费网站永久免费观看| 成人激情小说网站| av中文在线播放| 亚洲精品日韩丝袜精品| 日韩欧美看国产| 亚洲欧洲日韩综合二区| 狠狠色综合色综合网络| 性欧美videos| 精品国产免费人成在线观看| 黄色在线免费观看网站| 免费国产在线精品一区二区三区| 男人的天堂成人在线| 成人疯狂猛交xxx| 欧美午夜精彩| 一级黄色片国产| 亚洲国产精品影院| 亚洲欧洲精品视频| 国产精品福利观看| 91精品国产91久久久久久密臀 | 成年人观看网站| 国产欧美一区二区三区网站 | 美女视频黄频大全不卡视频在线播放| 色欲狠狠躁天天躁无码中文字幕 | 久久久福利影院| 亚洲一二三四在线观看| 午夜性色福利视频| 国产精品狼人色视频一区| 一区二区在线| 水蜜桃av无码| 欧美私模裸体表演在线观看| free性欧美hd另类精品| 精品视频一区二区| 蜜臀91精品一区二区三区| 久久久精品国产sm调教网站| 亚洲精品日韩丝袜精品| 超碰国产精品一区二页| 欧美一级片免费播放| 国产日韩视频一区二区三区| 国产女人18毛片水真多| 91精品国产99久久久久久| 日韩三级在线| 欧美夫妇交换xxx| 欧美日韩在线观看一区二区 | 中文字幕在线播放网址| 欧美日韩最好看的视频| 国内精品免费**视频| 天天综合网入口| 欧美成人剧情片在线观看| 国产精品视频一区二区三区四蜜臂| 99热一区二区|