Jmeter测试TCP最大连接数

3,245 阅读3分钟

背景

近期有个需求,需要测试下 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 表示。此次测试服务端返回的最后一个字符为"}",故 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.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 台测试机上,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