并发模拟的四种方式+工具,超级实用! |
您所在的位置:网站首页 › javaweb测试工具 › 并发模拟的四种方式+工具,超级实用! |
点击上方“Java精选”,选择“设为星标” 别问别人为什么,多问自己凭什么! 下方有惊喜留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... 一、PostmanPostman是一个款http请求模拟工具 首先演示一下postman最基本的使用 创建一个Springboot项目,测试的代码如下: 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 是经常使用的地址+端口号,可以设置为环境 推荐下自己做的 Spring Boot 的实战项目: https://gitee.com/yoodb/jing-xuan 点击右上角的设置图标 选择global 输入信息 以后再进行测试就能这样搞简写了 知道基本使用之后,我们来看一下如何模拟并发测试 填写基本信息后,创建 这个时候会创建出Concurrency的文件夹,我们可以把刚才测试的demo的例子放进这个文件夹下 这个时候就可以在Concurrency下看到这个接口测试了 选择并发测试: 这个时候弹出我们想要的框了 点击Run Concurrency 你可以立马感觉到CPU在“燃烧”,因为要记录并打印日志,显示的话是一条一条来的,其实测试的速度,要比你看到的打印的日志的速度快,绿色表示正常 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也是一款性能测试工具,是图形化的。 下载地址:传送门 http://jmeter.apache.org/ 需要Java8+的环境 解压到你觉得合适的目录下(注意最好是英文路径) 进入它的bin目录下 启动jmeter.bat即可 使用很简单,首先在测试计划部分新建一个线程组 设置好基础信息后添加HTTP请求(基本信息设置好没有OK哈,直接添加HTTP请求) 填写HTTP请求相关的内容 之后还要添加监听器,这里选择是图形结果 再添加一个查看结果树吧 在运行之前打开log Viewer 下面开始运行: 执行成功,来感受一下结果: 点进去 查看结果树 这里需要用到一个类,就是CountDownLatch。 CountDownLatch是一个计数器闭锁,通过它可以完成类似于阻塞当前线程的功能,即:一个线程或多个线程一直等待,直到其他线程执行的操作完成。 推荐下自己做的 Spring Cloud 的实战项目: https://gitee.com/yoodb/jingxuan-springcloud CountDownLatch用一个给定的计数器来初始化,该计数器的操作是原子操作,即同时只能有一个线程去操作该计数器。调用该类await方法的线程会一直处于阻塞状态,直到其他线程调用countDown方法使当前计数器的值变为零,每次调用countDown计数器的值减1。当计数器值减至零时,所有因调用await()方法而处于等待状态的线程就会继续往下执行。这种现象只会出现一次,因为计数器不能被重置。 下图和它的方法可以体现出来: CountDownLatch类只提供了一个构造器: public CountDownLatch(int count) { }; //参数count为计数值然后下面这3个方法是CountDownLatch类中最重要的方法(上图能够反映出来) public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException { }; //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public void countDown() { }; //将count值减1下面还需要看一个类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 { 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不是线程安全的,且没有作防护措施,结果是错的 上面是对代码的并发模拟的简单形式,值得注意的是,这里提到的两个类不是专门做并发模拟,它们的用途很广泛,大家可以了解一下。 版权声明:本文为CSDN博主「沉晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 https://blog.csdn.net/qq_42322103/article/details/102736170 众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理! ------ THE END ------
>Java精选面试题 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |