使用Jmeter对AI模型服务进行压力测试
一、JMeter介绍
Apache JMeter 是一款开源的性能测试工具,主要用于评估Web应用程序的负载和性能。它支持多种类型的测试,包括但不限于:
- 负载测试:模拟大量用户访问系统以检测其在高负载下的表现。
- 性能测试:评估系统在不同条件下的响应速度和稳定性。
- 稳定性测试:长时间运行测试以检查系统的稳定性和可靠性。
- 并发测试:测试系统处理同时发生的多个请求的能力。
JMeter的主要优点包括:
- 跨平台支持:可以在Windows、Linux、macOS等多种操作系统上运行,并支持多语言界面。
- 丰富的测试类型:不仅限于Web应用,还可以用于数据库、FTP服务器等的性能测试。
- 易于使用:拥有直观的图形用户界面(GUI),便于快速创建测试计划和执行测试。
二、安装JMeter
为了成功安装和运行JMeter,首先需要确保系统中已安装Java Development Kit (JDK)。
2.1 安装JDK
-
下载JDK:前往Oracle官网下载适合您操作系统的JDK版本。请注意选择与您的操作系统兼容的版本。
-
重要提示:自Java 11起,JDK不再默认生成
jre
目录。如果您需要jre
目录,可以通过以下命令手动创建:- 打开命令提示符(Windows)或终端(Linux/macOS),并以管理员权限运行。
- 切换到JDK安装目录下,例如:
cd C:\Program Files\Java\jdk-<version>
- 运行以下命令来生成
jre
目录:bin\jlink --module-path jmods --add-modules java.se --output jre
-
配置环境变量(如果未自动配置):
- 在Windows上,添加
JAVA_HOME
环境变量指向JDK安装目录,并将%JAVA_HOME%\bin
添加到PATH
变量中。 - 在Linux/macOS上,编辑
~/.bashrc
或~/.zshrc
文件,添加如下行:export JAVA_HOME=/path/to/your/jdk export PATH=$JAVA_HOME/bin:$PATH
- 使用
source ~/.bashrc
或source ~/.zshrc
使更改生效。
- 在Windows上,添加
完成上述步骤后,您可以继续安装JMeter。请确保JDK已正确安装并通过运行java -version
命令验证安装是否成功。
2.2 安装JMeter
从官网下载:http://jmeter.apache.org/download_jmeter.cgi
选择binaries文件下载,下载后解压即可。
选择zip文件下载后,解压压缩包即可。然后添加环境变量:
我的电脑----属性----高级----环境变量----在系统变量
(1)JMETER_HOME
D:\apache-jmeter-5.2.1\apache-jmeter-5.2.1
(2)CLASSPATH
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
2.3 启动Jmeter
在bin目录下找到jmeter.bat文件,双击运行就可以了,会打开以下两个界面,不要关闭命令行界面
三 使用Jmeter
安装并启动Jmeter后,我们就可以测试我们的模型服务了,根据之前文章的介绍,我们现在已经有一个ChatGLM3的模型服务。
下面我们对服务进行压测:
3.1 设置语言
3.2 增加线程组
右击测试计划--添加--线程--线程组
添加线程组后可以看到有三个属性:
线程数:就是启动的线程个数。
Ramp-Up时间(秒):所有线程在时间段内把请求发送完(循环次数是1),而且请求的时间间隔是固定的=Ramp-Up time/线程数。
比如1秒10个线程数就是在1秒内开启10个线程;
比如5秒10个线程数就是每秒开启2个线程;
循环次数:就是每秒的线程数循环启动多少次。
比如线程数(5),ramp-up time(1), 循环次(2),就是每秒10个线程,总共10个线程;
比如线程数(10),ramp-up time(2), 循环次(2),就是每秒10个线程,总共20个线程;
所以并发个数是由这三个属性值一起设定的。
对这三个参数的深入理解和使用可以参考文章。
3.3 添加HTTP请求
3.4 添加HTTP请求header
3.5 添加结果树
添加查看结果树可以看到请求的返回信息,比如点击运行(绿色小三角),就能看到返回
3.6 添加常量吞吐量定时器
常数吞吐量定时器可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。
只有此线程:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的目标吞吐量乘以该线程的数量
所有活动线程:设置的目标吞吐量将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
当前线程组中的所有活动线程:与所有活动线程的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
所有活动线程(共享):设置的目标吞吐量将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和所有活动线程选项的效果完全相同。
当前线程组中的所有活动线程(共享):与当前线程组中的所有活动线程基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
这里设置的是目标吞吐量,结合3.2中的参数,我们预设1秒钟10个线程,那1分钟就是600个,所以这里我的目标吞吐量设置为600.
3.7 添加汇总报告
3.8 生成html报告
生成jtl文件
E:\program files\apache-jmeter-5.6.2\apache-jmeter-5.6.2\bin> .\jmeter -n -t HTTP请求.jmx -l result.jtl
生成html
E:\program files\apache-jmeter-5.6.2\apache-jmeter-5.6.2\bin> .\jmeter -g result.jtl -o .\result
可以看到我们通过以上步骤,得到了比较完整的测试报告~通过报告我们可以分析出服务的TPS,最大响应时间等信息,再结合你的GPU使用率,就可以得出基本的结论,下一步就是思考怎么提升服务性能增加qps了~