背景

近期有个需求,需要测试下 SLB 的四层负载均衡性能,即测试 TCP 的最大连接数和连接速度。本次测试我们选择使用 Jmeter

单机调试

编写 TCP 服务端

#!/usr/bin/python3
# -*-coding:utf-8 -*-
from socket import *
import time
COD = 'utf-8'
HOST = '0.0.0.0' # 主机ip
PORT = 9999 # 端口号
BUFSIZ = 1024
ADDR = (HOST, PORT)
SIZE = 10
tcpS = socket(AF_INET, SOCK_STREAM) # 创建socket对象
tcpS.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #加入socket配置,重用ip和端口
tcpS.bind(ADDR) # 绑定ip端口号
tcpS.listen(SIZE)  # 设置最大链接数
while True:print("服务器启动,监听客户端链接")conn, addr = tcpS.accept()print("链接的客户端", addr)while True:try:data = conn.recv(BUFSIZ) # 读取已链接客户的发送的消息except Exception:print("断开的客户端", addr)breakprint("客户端发送的内容:",data.decode(COD))if not data:breakmsg = time.strftime("%Y-%m-%d %X") #获取结构化事件戳msg1 = '[%s]:%s' % (msg, data.decode(COD))#conn.send(msg1.encode(COD)) #发送消息给已链接客户端conn.send('666}'.encode(COD))conn.close() #关闭客户端链接
tcpS.close()

编写 Jmeter 脚本

1、创建线程组

2、线程组配置

如上,意为发起 10 万长连接,在 1000 秒内完成,循环一次。

3、添加 TCP Sampler

4、配置TCP Sampler

具体参数含义可以上网查询,如上,EOL 通常是对应服务端返回的最后一个字符的 byte 表示。此次测试服务端返回的最后一个字符为"}",故 EOL125

5、添加结果监听器

启动服务端,发起测试

分布式

由于本次要测试百万链接,所以我们需要提前准备多台 Linux 机器进行测试。

测试机安装 JDK

1、下载JDK离线包
https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/2、上传离线包到Linux机器上并解压
pwd
/root/
tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz3、配置
cd /usr/
mkdir java
cd java/
mv /root/jdk8u292-b10/ .
cd jdk8u292-b10/
pwd
/usr/java/jdk8u292-b104、配置profile
vi /etc/profile向profile中增加如下内容
export JMETER_HOME=/root/apache-jmeter-5.4.1
export JAVA_HOME=/usr/java/jdk8u292-b10
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin::$JMETER_HOME/bin:$PATH:$HOME/bin

测试机安装 Jmeter

1、直接将下载的apache-jmeter-5.4.1.zip文件拷贝到Linux机器上2、解压apache-jmeter-5.4.1.zip
unzip apache-jmeter-5.4.1.zip3、配置profile(上面jdk中已经配置好了)
vi /etc/profile向profile中增加如下内容
export JMETER_HOME=/root/apache-jmeter-5.4.1
export JAVA_HOME=/usr/java/jdk8u292-b10
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin::$JMETER_HOME/bin:$PATH:$HOME/bin

检查 JDK 和 Jmeter

[root@test-2 ~]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
[root@test-2 ~]# jmeter --version_    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____/ \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \/ _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |/ ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <
/_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.4.1Copyright (c) 1999-2021 The Apache Software Foundation[root@test-2 ~]#

21 台测试机上,JDKJmeter 的安装都是如此。接下来对测试机上的 Jmeter 进行配置

Jmeter Slave 配置

1、修改20台slave的server_port
修改%JMETER_HOME%/bin/jmeter.properties文件中的server_port=7890,这个端口号可以自定义。2、生成jks文件
在master上,执行%JMETER_HOME%/bin/create-rmi-keystore.sh生成rmi_keystore.jks,将这个jks拷贝到20台slave的%JMETER_HOME%/bin/下。

Jmeter Master 配置

1、添加remote_host
修改%JMETER_HOME%/bin/jmeter.properties文件中的添加remote_host=slave1_ip:7890,slave2_ip:7890,slave20_ip:7890即将20台slave的ip和端口全部配置进去

执行测试

jmeter -JthreadNum=100 -Jtime=200 -n -t /root/TCP.jmx -r -l /root/log.jtl# 参数含义
-n noGUI
-t jmeter script
-r remote mode
-l logs

测试过程中控制台会打印部分日志,详细结果可以在 JmeterGUI 中添加监听器,然后从 jtl 文件中读取结果。

服务端查看连接数

netstat -ant |grep 9999

往期推荐

shutil | 高阶文件操作

OS | 被你小看的实用库!

来了,他来了,他终于来了!

Jmeter怎么获取token?

loguru | Python日志神器

Python中的那些随机操作

用Python操作配置文件,超简单

FastApi-01-初识

点亮在看!

Jmeter测试TCP百万连接相关推荐

  1. jmeter测试TCP服务器/模拟发送TCP请求

    jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应. jmeter模拟发送TCP请求的方法: 1. ...

  2. JMeter测试TCP/IP Socket应用的性能

    摘要 本文描述了如何利用JMeter来测试TCP/IP Socket应用的性能.文章先对Socket作了一点简单介绍,然后提供并解释了两个样例Socket应用,最后介绍如何利用JMeter来对它们进行 ...

  3. tcp 远程服务器,C#编程学习之使用TcpClient / BeginConnect测试远程服务器tcp端口连接-网络教程与技术 -亦是美网络...

    有时候经常需要对一些服务器的端口进行tcp连接测试,通常使用"telnet IP地址 端口号"的方式即可,不能说这种方式不可取,只是使用起来比较麻烦,本着简单好用的目的,不如我们自 ...

  4. TCP长连接和短连接代码及其比较

    前言: 最近又看到了关于TCP长连接和短连接的概念,以前也看过Http长连接和短连接的概念,因为Http是建立在TCP协议之上的,所以它其实是依赖TCP的长连接和短连接.所以,我就萌生了一个想法,看看 ...

  5. jmeter 压力测试tcp

    cmd下管理员执行 jmeter 界面 英文版 中文切换以后不能执行 最多跑905个线程 线程限制 查看结果数 界面会跑死 windows环境 注意:测试1万的tcp并发连接  大爷的 window最 ...

  6. jmeter 用户数 线程数_如何使用jmeter编写TCP测试脚本

    创建线程组 新建线程组后,会出现一个线程组的配置界面,如下 Number of Threads(users):这是 JMeter 中的线程数,也可以称之为用户数,是产生TPS的,至于产生多少的TPS取 ...

  7. 一文搞定Netty,打造单机百万连接测试!

    文章目录 1.Netty框架简介 1.1.Netty简介 1.2.Netty主要特性 1.3.Netty和Tomcat的区别 1.4.BIO编写Client-Server通信 2.常见的网络IO模型 ...

  8. jmeter tcp长连接性能测试

    jmeter除了可以做http测试,还支持tcp长连接 图中的Ramp-Up Period需要注意,它表示启动所有线程花费的时间,如图所示,设置为40秒,jmeter会自动计算每秒应该启动多少个线程. ...

  9. Netty 单机百万连接测试

    1.Netty框架简介 1.1.Netty简介 netty是jboss提供的一个java开源框架,netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可用性的网络服务器和客户 ...

最新文章

  1. VS Code运行Python程序
  2. ASP.NET学习笔记(11)--ASP简介
  3. 【HYSBZ - 2763 】飞行路线 (分层图最短路,最短路dp)
  4. RTMP中FLV流到标准h264、aac的转换
  5. FTP相关命令(手机FTP服务启动应用)
  6. linux java运行class文件_jvm学习java文件运行过程
  7. keepalived高可用配置注意事项
  8. 三菱PLC编程软件 GX Developer 8.86 中文版的下载与安装 (win 7 64位)
  9. Word转换PDF:pdf虚拟打印机怎么用操作技巧详解
  10. 2019最新《网易云课堂 C++收银系统项目实战教程》 C++开发网吧收银系统(MFC+ADO)
  11. 模块度Q——复杂网络社区划分评价标准
  12. ANSYS 有限元分析 修改与编辑
  13. java程序的结构与类型实验报告_20172301 《Java软件结构与数据结构》实验三报告...
  14. UART和RS232/RS485的关系是什么?
  15. 网站被攻击如何查找木马文件 以及攻击者IP
  16. 谷歌提前关闭 G+;春运 12 天后开售,“候补购票”功能将上线 12306
  17. mybatis generator 自动生成 在线生成器 生成service controller 含基础增删改查 自动生成工具 只需要建表SQL语句
  18. arch使用create_ap创建wifi热点
  19. linux查看指定目录下各个文件大小以及总体大小
  20. [翻译Pytorch教程]NLP部分:使用TorchText进行文本分类

热门文章

  1. 哲学家用餐问题——多线程死锁问题
  2. Timesten 日常管理命令合集
  3. 统计手机品牌的市场占有率
  4. YUV420与YUV422区别
  5. svg里stroke相关属性在css动画中的应用
  6. 计算机网络(第7版)全部课后答案
  7. jszip压缩图片file-saver批量导出空文件夹以及有损图片问题解决
  8. 动软生成器添加Mysql注释
  9. JAVA核心技术(2)IO
  10. 计算机学院类脑计算,类脑计算丨CNCC技术论坛