Apache JMeter进行TCP并发压力测试初尝试

前言

由于互联网编程实验二第三题要求比较使用线程池与否的服务器的并发性能,遂检索信息并了解到Apache JMeter这个工具

本文主要介绍了在已有Java JDK的情况下对Apache JMeter的安装及配置,以及利用JMeter进行TCP压力测试

一、安装及配置

先在官网下载压缩包:Apache JMeter - Download Apache JMeter

image.png

将文件apache-jmeter-5.6.3.zip解压到自己选择的目录中

在根目录下,找到bin文件夹,进入文件夹中,找到jmeter.bat,双击即可打开软件

二、TCP服务器

编写Java代码,在Server类的main函数中,指定一个端口作为服务器端口,并在while死循环中不断接收客户端的请求,对于每一个请求新开一个线程ThreadServer,并在其中处理请求

public class Server {  static int PORT = 9000;  static int MAX_POOL = 100;  public static void main(String[] args) throws IOException {  ServerSocket server = new ServerSocket(PORT);  // without thread poolwhile (true) {  Socket accept = server.accept();  Thread thread = new Thread(new ThreadServer(accept));  thread.start();  }  // with thread pool // ExecutorService service = Executors.newFixedThreadPool(MAX_POOL);  // while (true) {  //   Socket accept = server.accept();  //   service.submit(new ThreadServer(accept));  // }  }  
}

代码中将服务器分为两种模式,第一段为没有线程池的模式,第二段为使用线程池的模式。通过分别注释并重新编译运行来启动不同模式的服务器

为了简化服务端和客户端的交互,我们在ThreadServer中仅仅打印连接成功以及断开连接的信息,而不进行多余的通信,如下

public class ThreadServer implements Runnable{  Socket socket;  static int BUFFER_SIZE = 1024;  static String EXIT_STR = "exit";  public ThreadServer(Socket socket){  this.socket = socket;  }  @Override  public void run(){  try{  System.out.println("connection start");  OutputStream out = socket.getOutputStream();  out.write("connect successfully".getBytes());  // echo service  // InputStream in = socket.getInputStream();  // byte[] inBytes = new byte[BUFFER_SIZE];  // int len;  // while((len = in.read(inBytes)) != 0){  //   String str = new String(inBytes, 0, len);  //   if(str.equals(EXIT_STR))  //     break;  //   System.out.println("received: " + str);  //   out.write(str.getBytes());  // }  System.out.println("connection end");  socket.close();  }catch (IOException e){  e.printStackTrace();  }  }  
}

注释部分是提供echo服务,需要客户端同步实现,在本题中无需使用,客户端参考以下代码:

public class Client {  static String SERVER_HOST = "127.0.0.1";  static int SERVER_PORT = 9000;  static int BUFFER_SIZE = 1024;  static String EXIT_STR = "exit";  public static void main(String[] args) throws IOException {  Socket client = new Socket(SERVER_HOST, SERVER_PORT);  Scanner scanner = new Scanner(System.in);  OutputStream out = client.getOutputStream();  InputStream in = client.getInputStream();  byte[] buffer = new byte[BUFFER_SIZE];  // echo  while(scanner.hasNextLine()){  String lineOfWord = scanner.nextLine();  out.write(lineOfWord.getBytes());  if(lineOfWord.equals(EXIT_STR))  break;  int len = in.read(buffer);  System.out.println("echo: " + new String(buffer, 0, len));  }  client.close();  }  
}

三、并发测试

1. 创建测试计划

打开JMeter,右键单击测试计划(test plan),一直选择到新建线程组,如下

image.png

右键单击新建的线程组,分别新建TCP Sampler和Response Time Graph,分别用于TCP连接以及输出响应时间与时间的折线图

image.png

image.png

注意到TCP Sampler属于Sampler模块,我们也可在此模块中选择HTTP Request进行HTTP请求的测试;Response Time Graph属于Listener模块,我们可以在此模块中选择Aggregate Report输出测试的聚合报告,包括响应时间的平均值、最小值,以及吞吐量等

在TCP Sampler中,指定服务器的地址及端口号如下

image.png

在Response Time Graph指定记录的间隔,单位为ms,这里设置为1000

image.png

2. 正式测试

首先启动服务端

D:\idea project\internetprog\exp2\exp2\src>javac Server.javaD:\idea project\internetprog\exp2\exp2\src>java Server

单击Thread Group,不断更改以下几个参数,测试不同程度的并发下服务的响应时间

image.png

其中

  1. Number of Threads即创建的线程数
  2. Ramp-up period即在多长时间内创建以上线程数,单位为s
  3. Loop Count即执行的次数,勾选Infinite代表无限次执行

在本例中,我选择固定Ramp-up period为1,Loop Count为5,修改Number of Threads依次为2000、4000、6000、8000以及10000,分别对比在有无线程池的服务器中,出现较长延迟的响应时间。每种情况分别测试3~5次。

测试结果如下

线程数无线程池有线程池
20001ms内1ms内
40001s内1s内
60002s内2s内
80004s ~ 8s3s ~ 6s
1000010s ~ 16s3s ~ 7s

可以看出,当并发压力增大时,无线程池出现的长延迟响应时间,相比有线程池的情况增长要快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clion连接MySQL数据库:实现C/C++语言与MySQL交互

确保你的电脑里已经有了MySQL。 1、找到MySQL的目录 2、进入lib目录 3、复制libmysql.dll和libmysql.lib文件 4、将这俩文件粘贴到你的clion项目的cmake-build-debug目录下 如果不是在这个目录下,运行时会出以下错误报错: 进程已结束,退…

word导出或另存为pdf图片不清晰问题解决方案

问题描述: 使用word 2019导出pdf时图片不清晰,即使我已经在“选项 → \to →高级 → \to →图片大小和质量 → \to →不压缩文件中的图像 ”选项卡中关闭掉了图片压缩依然无效。 解决方案: 利用word foxit pdf 软件打印的方案转pdf。 &…

AppleWatch是真的能够减少我iPhone的使用时长

我应该是比较专情的果粉了,我有一台MacBook Pro、iPad Pro、airpods pro 2和iPhone 15 Pro Max。但我还从来没有用过苹果手表。 然后,我就去买了AppleWatchSeries9蜂窝款,并试用了一周,我想知道它是否能帮助我减少使用iPhone的时间…

MySQL中如何随机获取一条记录

点击上方蓝字关注我 随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。在本文中,我们将探讨几种…

新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人

江苏晋控装备新恒盛化工有限公司是晋能控股装备制造集团有限公司绝对控股的化工企业,公司位于江苏省新沂市。新恒盛公司40•60搬迁项目在江苏省新沂市经济开发区化工产业集聚区苏化片区建设,总投资为56.64亿元,该项目是晋能控股装备制造集团重…

ios CI/CD 持续集成 组件化专题一 iOS 将图片打包成bundle

一、 创建 选择 macos 下的Bundledle 二 、取名点击下一步 三、Base SDK 选择ios 四 、Build Active Architecture Only 五、Installation后面的内容删除 六、.Skip Install 选择NO 七、Strip Debug Symbols During Copy 中"Release"项设置为 "YES" 八、…

网络基础(1)

文章目录 1. 网络基础1.1 网络协议1.1.1 OSI七层模型 1.3 网络中的地址管理 2. 套接字编程2.1 源IP地址和目的IP地址2.3 socket编程接口2.3.2 sockaddr结构2.2.3 UDPecho服务器2.24 netstat2.25 远程执行命令 1. 网络基础 1.1 网络协议 1.1.1 OSI七层模型 OSI(Op…

偏微分方程算法之二阶双曲型方程紧交替方向隐格式

目录 一、研究对象 二、理论推导 2.1 二维紧差格式 2.2 紧交替方向隐格式

扭蛋机小程序对市场的发展有哪些推动作用?

近几年,扭蛋机发展的非常迅猛。随着二次元文化的火热,给扭蛋机带来了发展机遇,扭蛋机行业也受到了大众的喜爱。扭蛋机的商品种类多样化,包含了各类热门IP周边衍生品、玩具、小商品等,适合所有消费人群,市场…

2024-04-24 问AI: 在深度学习中,CUDA 是什么?

文心一言 在深度学习中,CUDA(Compute Unified Device Architecture)是由NVIDIA公司开发的一种并行计算平台和编程模型。它的主要目的是利用GPU(图形处理单元)的强大计算能力来加速各种计算任务,包括深度学…

2024年G1工业锅炉司炉证考试题库及G1工业锅炉司炉试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年G1工业锅炉司炉证考试题库及G1工业锅炉司炉试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲…

8.0MGR单主模式搭建_克隆(clone)插件方式

为了应对事务一致性要求很高的系统对高可用数据库系统的要求,并且增强高可用集群的自管理能力,避免节点故障后的failover需要人工干预或其它辅助工具干预,MySQL5.7新引入了Group Replication,用于搭建更高事务一致性的高可用数据库…

【前端缓存】localStorage是同步还是异步的?为什么?

写在开头 点赞 收藏 学会 首先明确一点,localStorage是同步的 一、首先为什么会有这样的问题 localStorage 是 Web Storage API 的一部分,它提供了一种存储键值对的机制。localStorage 的数据是持久存储在用户的硬盘上的,而不是内存。这意…

.Net添加了引用,仍然提示找不到命名空间

如图,MyStudy控制台程序引用了一个C#类库MyClassLibrary 代码里也能敲出来using MyClassLibrary,但是build时始终提示找不到命名空间MyClassLibrary 我检查了MyClassLibrary的Assembly,命名空间名称无误 又检查了MyStudy里的引用信息&#x…

Vue.js之MVVM设计模式

前言 看到招聘信息网站上有对MVVM框架经验的需求,刚好曾有过这方面的笔记,在复习的同时总结核心知识点分析给大家。 MVVM是可以实现View和Model的完全分离,通过ViewModel这个桥梁进行交互,然后ViewModel通过双向数据绑定把View层和…

Linux SDIO-WiFi 协议栈

Linux SDIO-WiFi 协议栈 1. 简介2. BCMDHD2.1 WiFi模组2.2 驱动初始化(dhd_module_init) 3. Broadcom fullmac WLAN 1. 简介 2. BCMDHD BCMDHD:Broadcom Dongle Host DriverSIP:System In Package 2.1 WiFi模组 2.2 驱动初始化…

web server apache tomcat11-12-SSL/TLS Configuration

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Java、Tomcat、Apache HTTP Server以及浏览器服务器的关系

一.浏览器服务器有哪些 浏览器服务器是指在互联网上扮演服务器角色的设备或程序,用于响应浏览器发出的请求并向浏览器返回相应的数据。 常见的浏览器服务器有以下几种: Apache HTTP Server:这是世界上最常用的web服务器软件之一,…

spring DisposableBean作用,在spring Bean销毁时的钩子 以及@PreDestroy

DisposableBean 作用 在Spring框架中,DisposableBean是一个接口,它定义了一个单一的方法,用于在Spring容器关闭时或一个由Spring管理的Bean不再需要时执行特定的清理操作。当一个Bean实现了DisposableBean接口,Spring容器会在销毁…

Windows创建类似Linux软连接、Windows软连接、快捷方式

Windows创建软连接 mklink 在 Windows 系统上,可以使用 mklink 命令来创建类似 Linux 的软连接,也称为符号链接。软连接是一种指向另一个文件或目录的链接,它允许您使用不同的名称来访问相同的文件或目录。与快捷方式不同,软连接…