网络异常,图片无法展示
|
背景
近期有个需求,需要测试下 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) break print("客户端发送的内容:",data.decode(COD)) if not data: break msg = 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
表示。此次测试服务端返回的最后一个字符为"}"
,故 EOL
为 125
。
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.gz 3、配置 cd /usr/ mkdir java cd java/ mv /root/jdk8u292-b10/ . cd jdk8u292-b10/ pwd /usr/java/jdk8u292-b10 4、配置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.zip 3、配置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.1 Copyright (c) 1999-2021 The Apache Software Foundation [root@test-2 ~]# 复制代码
在
21
台测试机上,JDK
和Jmeter
的安装都是如此。接下来对测试机上的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 复制代码
测试过程中控制台会打印部分日志,详细结果可以在
Jmeter
的GUI
中添加监听器,然后从jtl
文件中读取结果。
服务端查看连接数
netstat -ant |grep 9999