一、Postman
Postman 是一個款 HTTP 請求模擬工具

首先演示一下 Postman 最基本的使用,創建一個 Spring Boot 專案,測驗的代碼如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestConrtoller {
@GetMapping("demo")
public String testDemo() {
return "result~";
}
}

為了便于操作,一般會將
http://127.0.0.1:8080 是經常使用的地址+埠號,可以設定為環境,點擊右上角的設定圖示

選擇 global

輸入資訊

以后再進行測驗就能這樣搞簡寫了

知道基本使用之后,我們來看一下如何模擬并發測驗

填寫基本資訊后,創建:

這個時候會創建出Concurrency的檔案夾,我們可以把剛才測驗的demo的例子放進這個檔案夾下:


這個時候就可以在Concurrency下看到這個介面測驗了

選擇并發測驗:

這個時候彈出我們想要的框了

點擊 Run Concurrency
你可以立馬感覺到 CPU 在“燃燒”,因為要記錄并列印日志,顯示的話是一條一條來的,其實測驗的速度,要比你看到的列印的日志的速度快,綠色表示正常

二、Apache Bench(AB)
ApacheBench 是 Apache 服務器自帶的一個web壓力測驗工具,簡稱ab,
ab又是一個命令列工具,對發起負載的本機要求很低,根據ab命令可以創建很多的并發訪問執行緒,模擬多個訪問者同時對某一URL地址進行訪問,因此可以用來測驗目標服務器的負載壓力,總的來說ab工具小巧簡單,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監控,
使用的話,首先需要安裝 Apache 服務器
網站:傳送門 http://httpd.apache.org/download.cgi
因為我的作業系統是 windows10, 這里選擇 File for Microsoft Windows
Linux下的安裝是非常簡單的,這里不再演示

選擇 ApacheHaus

進入下載頁面 選擇適合自己電腦的版本

檔案解壓到本地檔案夾下,如果不是解壓在c盤,需要設定引數,注意檔案路徑最好都是英文,關于需要設定引數,conf->httpd.conf 使用文本編輯器打開,需要修改的有三個地方:


運行根目錄,修改成自己解壓到本地的路徑

監聽埠,默認監聽埠是80,如果已被使用會報錯需要修改,如果80埠未被使用,可不修改;如果修改了監聽埠,則需要把ServerName localhost也相應改成同樣的端 口號


DocumentRoot 測驗檔案存放地,且該目錄必須存在

配置完成后,命令列cmd進入 D:\softUtil\Apache24\bin 目錄下
httpd.exe -k install

啟動:
httpd.exe -k start
測驗:
-n :請求數
-c: 并發數

三、并發模擬工具JMeter
JMeter也是一款性能測驗工具,是圖形化的,下載地址:傳送門 http://jmeter.apache.org/

需要 Java8+ 的環境

解壓到你覺得合適的目錄下(注意最好是英文路徑),進入它的 bin 目錄下 啟動 jmeter.bat 即可,

使用很簡單,首先在測驗計劃部分新建一個執行緒組



設定好基礎資訊后添加HTTP請求(基本資訊設定好沒有OK哈,直接添加HTTP請求)

填寫HTTP請求相關的內容

之后還要添加監聽器,這里選擇是圖形結果

再添加一個查看結果樹吧

在運行之前打開log Viewer

下面開始運行:

執行成功,來感受一下結果:

點進去

查看結果樹

四、代碼模擬
這里需要用到一個類,就是 CountDownLatch,CountDownLatch 是一個計數器閉鎖,通過它可以完成類似于阻塞當前執行緒的功能,即:一個執行緒或多個執行緒一直等待,直到其他執行緒執行的操作完成,
更多多執行緒教程可以參考:https://www.javastack.cn/categories/Java/
CountDownLatch 用一個給定的計數器來初始化,該計數器的操作是原子操作,即同時只能有一個執行緒去操作該計數器,呼叫該類await方法的執行緒會一直處于阻塞狀態,直到其他執行緒呼叫 countDown 方法使當前計數器的值變為零,每次呼叫 countDown 計數器的值減1,
當計數器值減至零時,所有因呼叫await()方法而處于等待狀態的執行緒就會繼續往下執行,這種現象只會出現一次,因為計數器不能被重置,下圖和它的方法可以體現出來:

CountDownLatch類只提供了一個構造器:
public CountDownLatch(int count) { };
然后下面這 3 個方法是 CountDownLatch 類中最重要的方法(上圖能夠反映出來)
public void await() throws InterruptedException { };
public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };
public void countDown() { };
下面還需要看一個類 Semaphore
Semaphore 與 CountDownLatch 相似,不同的地方在于 Semaphore 的值被獲取到后是可以釋放的,并不像 CountDownLatch 那樣一直減到底,
它也被更多地用來限制流量,類似閥門的 功能,如果限定某些資源最多有N個執行緒可以訪問,那么超過N個主不允許再有執行緒來訪問,同時當現有執行緒結束后,就會釋放,然后允許新的執行緒進來,有點類似于鎖的lock與 unlock程序,相對來說他也有兩個主要的方法:
用于獲取權限的acquire(),其底層實作與CountDownLatch.countdown()類似;用于釋放權限的release(),其底層實作與acquire()是一個互逆的程序,
通過這兩個類可以進行并發的模擬:
測驗一下:
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*;
@Slf4j
public class CuncurrencyTest {
public static int clientTotal = 5000;
public static int threadTotal = 200;
public static int count = 0;
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newCachedThreadPool();
final Semaphore semaphore = new Semaphore(threadTotal);
final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
for (int i = 0; i < clientTotal; i++) {
executorService.execute(() -> {
try {
semaphore.acquire();
add();
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
log.error("exception",e);
}
countDownLatch.countDown();
});
}
countDownLatch.await();
executorService.shutdown();
log.info("count:{}",count);
}
private static void add() {
count++;
}
}
因為 count 不是執行緒安全的,且沒有作防護措施,結果是錯的
上面是對代碼的并發模擬的簡單形式,值得注意的是,這里提到的兩個類不是專門做并發模擬,它們的用途很廣泛,等之后更新Java網路編程的東西的時候,還會詳細介紹它們,
著作權宣告:本文為CSDN博主「沉曉」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告,
原文鏈接:https://blog.csdn.net/qq_42322103/article/details/102736170
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
2.勁爆!Java 協程要來了,,,
3.Spring Boot 2.x 教程,太全了!
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485813.html
標籤:其他
上一篇:用代碼改變表單的外觀
下一篇:HZNU數模小測驗決議
