背景
近期有个需求,需要测试下 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
评论区