程序猿专属“压测工具”并发模拟

article/2025/11/3 23:23:48

目录

前言

一、Postman

二、Apache Bench(AB)

三、并发模拟工具JMeter

四、代码模拟


 

前言

在项目开发中,我们有时候需要测试服务器的抗压和qps,需要同时有多个请求请求同一服务。比如我和你现在都同时在请求百度的服务器提供搜索。

大量的并发访问如果超出了服务器的承受能力的话,轻则导致服务器抛弃一部分请求,重则导致服务器资源耗尽,当机。

有一种攻击叫分布式拒绝服务攻击(DDOS),就是利用这个。使得大量的垃圾请求阻塞服务器,使得服务器无法处理正常的请求从而耗尽资源。

今天分享一下不使用压测工具来测试我们服务器的性能,程序员专属压测工具;

一、Postman

Postman 是一个款 HTTP 请求模拟工具;

e12dad1ddf2042a58ec0e639b4fde260.png

 

首先演示一下 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 "Hello world~";}
}

 7b2d8ce445d949008329346a711a25c5.png

 

为了便于操作,一般会将

http://127.0.0.1:8080 是经常使用的地址+端口号,可以设置为环境,点击右上角的设置图标

4c8ece6388d14aff8286ee187960178d.png

选择 global;

594c1376b7ae4c889693bed2577a7203.png

 

 

输入IP,端口信息:

e71d7f8ffd8747208b378ba65c349c4c.png

以后再进行测试就能这样搞简写了;

 

79fa7c77ad5f42488aa2f1e751472353.png

 

知道基本使用之后,我们来看一下如何模拟并发测试;

5c1dd6e893324dad91a1b5e0a737d5e6.png

 

 

填写基本信息后,创建:

 

b4540f1a388048cebf35d238f505fde3.png

 

这个时候会创建出Concurrency的文件夹,我们可以把刚才测试的demo的例子放进这个文件夹下:

a55652dd46a744c5b81b388b79959c77.png

 

613963b0af2942e8a364e060fdb9f998.png

 

这个时候就可以在Concurrency下看到这个接口测试了;

0fa316ae91594ca1a73097bf4e5fa541.png

 

选择并发测试:

f2872ea1690c48c7b875052325c6c3a4.png

 

 这个时候弹出我们想要的框:

6320a22a0a9847debaa81b6b2bd590a4.png

点击 Run Concurrency

你可以立马感觉到 CPU 在“燃烧”,因为要记录并打印日志,显示的话是一条一条来的,其实测试的速度,要比你看到的打印的日志的速度快,绿色表示正常;

5523843f6e874ea6ab07cae4429bc976.png

 

 

二、Apache Bench(AB)

ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。

ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。

使用的话,首先需要安装 Apache 服务器

网站:传送门 http://httpd.apache.org/download.cgi

因为我的操作系统是 windows10, 这里选择 File for Microsoft Windows

Linux下的安装是非常简单的,这里不再演示:

77d5f5417dae4086a6aa2ed05d767c35.png

 

选择 ApacheHaus:

 

f8fa1fb28499485c9c63c3a721d6a8eb.png

 

进入下载页面 选择适合自己电脑的版本:

fda5690214c442f9b3f457075ad7f15a.png

文件解压到本地文件夹下,如果不是解压在c盘,需要设置参数,注意文件路径最好都是英文,关于需要设置参数,conf->httpd.conf 使用文本编辑器打开,需要修改的有三个地方:

dba742af1bee4299a6b7f532eea5a07d.png

 

431d59edf28445f6a31e3031425c8db8.png

 

运行根目录,修改成自己解压到本地的路径:

df929f287bdf420a88568e09ac169f21.png

 

监听端口,默认监听端口是80,如果已被使用会报错需要修改,如果80端口未被使用,可不修改;如果修改了监听端口,则需要把ServerName localhost也相应改成同样的端 口号:

2202129b561a49d38cf20776617a6b27.png

 

0b2d6864bd6444039d9ef13717dcef18.png

 

DocumentRoot 测试文件存放地,且该目录必须存在;

 

05b45f4a2de7469fbbd55e3f84c831df.png

 

配置完成后,命令行cmd进入 D:\softUtil\Apache24\bin 目录下:

httpd.exe -k install

fd83ec87a9b84ac393f88e70846af865.png

 

启动:

httpd.exe -k start

测试:

-n :请求数
-c: 并发数

60a2f84dc3af4233ab2b1c0e6125afa3.png

 

三、并发模拟工具JMeter

JMeter也是一款性能测试工具,是图形化的。下载地址:传送门 http://jmeter.apache.org/;

 

047dd7a541164eaeb27b9caf34f6c694.png

 

 需要 Java8+ 的环境:

10b767aad61147c69b20c3c9d9fba50a.png

解压到你觉得合适的目录下(注意最好是英文路径),进入它的 bin 目录下 启动 jmeter.bat 即可。 0f04e00086ae4a8ab7be791b5007cff6.png

 使用很简单,首先在测试计划部分新建一个线程组:

4b4570e50edb4d9aaddd83e6182538bc.png

d107ffe4b3474c22a986bd66d4c5e00a.png

 b5f114b54188490d9e15b4c7cc01ac91.png

 设置好基础信息后添加HTTP请求(基本信息设置好没有OK哈,直接添加HTTP请求)

aeead86ea70245ca921fc866031d96d0.png

 填写HTTP请求相关的内容:

bc0247aa0e424173b28b82a4c8a34c57.png

 之后还要添加监听器,这里选择是图形结果:

04c762cfaa254b4f9a959a40d4000d69.png

 再添加一个查看结果树吧;

0c9b11ad0dc440c7a23fbee4ac200f33.png

 在运行之前打开log Viewer:

ae80919864764b73beb4a6a7578ed38e.png

 下面开始运行:

37be2e1841794990875057705374d73a.png

 执行成功,来感受一下结果:

9673dd923a4846b6a08c03b64dd96a50.png

 点进去:

87a02903d3f4422ba519b783b8e244e2.png

 查看结果树:

c1f290bb670e4a3d954babad0651919e.png

 

四、代码模拟

这里需要用到一个类,就是 CountDownLatch。CountDownLatch 是一个计数器闭锁,通过它可以完成类似于阻塞当前线程的功能,即:一个线程或多个线程一直等待,直到其他线程执行的操作完成。

CountDownLatch 用一个给定的计数器来初始化,该计数器的操作是原子操作,即同时只能有一个线程去操作该计数器。调用该类await方法的线程会一直处于阻塞状态,直到其他线程调用 countDown 方法使当前计数器的值变为零,每次调用 countDown 计数器的值减1。

当计数器值减至零时,所有因调用await()方法而处于等待状态的线程就会继续往下执行。这种现象只会出现一次,因为计数器不能被重置。下图和它的方法可以体现出来:

2a9e1912c5a74c3fb3988385fa9d93fa.png

 

 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 不是线程安全的,且没有作防护措施,结果是错的;

5d8d221d53b74266be860c8b828ac2e0.png

 

上面是对代码的并发模拟的简单形式,值得注意的是,这里提到的两个类不是专门做并发模拟,它们的用途很广泛,等之后更新Java网络编程的东西的时候,还会详细介绍它们。

无情的代码机器记录代码生活。。。。。。。。。。。。。

 

 

 


http://chatgpt.dhexx.cn/article/DygnEI7J.shtml

相关文章

Linux 并发测试工具 httpd-tools工具的安装和使用

1、安装工具 sudo yum -y install httpd-tools2、查看工具安装目录 which ab3、查看版本 ab -V4、测试命令 #例如 ab -n 请求次数 -c 并发数 访问地址ab -n 1000 -c 100 https://www.baidu.com/ 表请求1000次中有100并发今天先分享到这里。谢谢大家评论&#xff01;

JMeter 接口测试/并发测试/性能测试

Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。因为再做接口测试时可以设置线程组&#xff0c;所以也可做接口性能测试。 本篇使用JMeter完成了一…

TCP Socket Client 测试工具,并发测试

TCP协议 Socket客户端测试程序 发送数据支持ASCII与16进制格式 可以模拟并发压力测试 创建终端&#xff0c;然后发送数据 工具下载

高并发测试、压力测试

1.postman没有并发测试&#xff0c;run collection是阻塞操作。 那么怎做并发测试呢&#xff1f; 使用JMeter jmeter可以进行压力测试、并发测试、性能测试&#xff0c;功能挺多&#xff0c;我就看了高并发&#xff0c;有需求请自行研究。 本文分为两步&#xff1a;1.环境安装…

如何测试一个网站的性能(并发数)?

点击打开链接 JMeter网站并发性测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据…

如何进行并发测试

创建步骤&#xff1a; 1、创建线程池&#xff1b; 2、创建线程&#xff0c;执行测试方法&#xff1b; 3、循环提交线程。

并发测试工具Jmeter安装与简单使用

文章目录 一、Jmeter简介二、安装1.下载2.配置环境变量3.启动Jmeter 三、使用1.添加线程组2.添加HTTP请求3.添加HTTP信息头管理器4.添加CSV 数据文件设置5.添加请求参数6.添加察看结果树7.测试 一、Jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 二、…

不同性能测试工具的并发模式

大家所熟悉的性能测试工具有Loadrunner、JMeter&#xff0c;以及其他小众一些的工具&#xff0c;如Locust、Ngrinder、Gatling等等&#xff0c;那么你们知道这些工具有什么不同吗&#xff1f;为什么有的工具能模拟数千上几万的并发&#xff0c;有的工具单机只能模拟一两千的并发…

Jmetter并发测试工具使用笔记

前言 Jmetter是一个开源的压力测试工具&#xff0c;常用于Web应用压力测试&#xff0c;本文针使用其对api接口进行并发性能测试&#xff0c;做笔记以备忘。 目录 一、下载和安装 1. Jmetter下载 2.下载并安装java1.8 二、基本配置 1.修改jmeter.properties配置 2.运行说…

高并发测试测试

压力测试概念 压力测试即在一定的硬件条件下&#xff0c;模拟大批量用户对软件系统进行高负荷测试&#xff0c;测试出软件的负荷极限&#xff0c;进而重新优化应用性能或在实际的应用环境中控制风险。常见压力测试工具 &#xff08;1&#xff09;Apache JMeter JMeter作为一款…

Linux脚本查数据库

本篇文章的简介: 1.在开发过程中,我们都会使用Linux,下面介绍使用Linux来查询数据库 2.使用定时器 #!/bin/bash ###!/bin/bash是一个解释器,表示用sh来解释执行你的命令#设置UTF-8export PGCLIENTENCODINGUTF8#查询下的目录data_dir/app/payhome/paytest/xzz#获取年月日时分秒e…

Linux下数据库的安装配置、数据库C程序连接

一、数据库的安装和配置 数据库的安装 配置 &#xff08;1&#xff09;先查看数据库状态(service mysql status)&#xff0c;如果没有启动&#xff0c;执行启动命令(service mysql start) &#xff08;2&#xff09;mysql -uroot -p在root状态执行&#xff0c;进入数据库&…

Linux部署达梦数据库超详细教程

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-达梦数据库 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下达梦数据库的下载与安装教程&#xff08;Linux版&#xff09;&#xff0c;超级详细。 &#x1f468;‍&#x1f…

linux之database(数据库)一

linux之database&#xff08;数据库&#xff09; 01&#xff1a; 数据库服务概述 、 构建MySQL服务 、 数据库基本管理 、 MySQL数据类型 02&#xff1a; 表结构 、 MySQL键值 03&#xff1a; 数据导入导出 、 管理表记录 、 匹配条件 、 MySQL管理工具 04&#xff1a; 用户授…

Linux嵌入式数据库

文章目录 一、SQLite简介二、SQLite数据库安装三、SQLite的命令用法3.1 创建一个数据库3.2 创建一张表格3.3 向创建的表格中插入数据3.4 查看数据库的记录3.5 其他常用语句 四、SQLite的编程操作4.1 打开/创建数据库的C接口4.2 创建表的C接口 一、SQLite简介 SQLite是一个无服…

linux中的数据库

目录 1.安装MySQL 2.创建数据库 3.删除数据库 4.查询创建数据库的语句 5使用数据库的语句 6.查询当前默认的数据库 7.查询使用的编码方式和校验规则 8.创建表的语句 9.表的物理存储结构 10.表的数据类型 11.总结 引言&#xff1a; 数据库是现代应用开发中不可或缺的组…

linux启动数据库

1、查看mysql版本   1&#xff09;status;   2&#xff09;select version(); 2、Mysql启动 1&#xff09;使用 service 启动&#xff1a;   service mysqld start (5.0版本是mysqld)   service mysql start (5.5.7版本是mysql) 2&#xff09;使用 mysqld 脚本启动…

linux之数据库

一.数据库的基本概念 1.定义&#xff1a; 数据库就是一种按数据结构来组织&#xff0c;存储和管理数据的仓库&#xff0c;其中包含数据挖掘&#xff0c;大数据信息的推送 2.数据库的种类 sqlserver-----微软公司 mysql---------sun公司 oracle--------oracle db2------------i…

【Linux-MYSQL】数据库的使用

目录 1.数据库介绍 &#x1f308;1.1数据库的分类 &#x1f308;1.2存储引擎 2.数据库的操作 &#x1f308;2.1创建数据库 ​编辑&#x1f47f; 1.查show databases; &#x1f47f;2删除 drop database库名 &#x1f47f;3.创建 create 查看创建数据库的详细信息 &…

Linux系统中安装数据库

1.在linux系统的root目录中创建一个temp目录 mkdir temp2.将MySQL安装包传输到Linux系统中temp目录下 3.解压压缩包&#xff0c;将解压后的文件移动到/usr/local&#xff0c;同时命名为mysql 解压&#xff1a;[rootlocalhost temp]# tar zxvf mysql-5.7.27-linux-glibc2.12-x…