1、安装java8:
通过网址下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
我下载的是RMP安装包。
下载后改名:
安装:
配置环境变量:
在内容末尾加上:
JAVA_HOME=/usr/java/latest CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME
编辑好后,使环境变量生效:
source /etc/profile
以上路径可以在以下检查安装软件的位置可以查到:
2、使用jemter
去下载:https://jmeter.apache.org/download_jmeter.cgi
下载:
wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.3.tgz
解压:
tar -xvf apache-jmeter-5.3.tgz
用cli模式运行并加载测试模板,最后生成html报告:
cd apache-jmeter-5.3.tgz && bin/jmeter -n -t Test\ Plan.jmx -l result.jtl -e -o ./html
参数:
# -n:以非GUI形式运行Jmeter # -t:运行JMX测试计划脚本文件的路径 # -l:运行结果保存路径(.jtl),此文件必须不存在
# -j: jmeter运行日志
# -r: 运行分布式压测服务器,指明用jmeter属性"remote_hosts"
# -R:运行分布式服务器,其后跟着服务器列表 # -e:在脚本运行结束后生成html报告,此参数要与-l一起使用。 # -o:用于存放html报告的目录,此目录必须为空。此参数与-e一起使用。
测试模板请在本机window下运行jmeter GUI来生成,保存后再上传到测试服务器上。
------------恢复内容开始------------
1、安装java8:
通过网址下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
我下载的是RMP安装包。
下载后改名:
安装:
配置环境变量:
在内容末尾加上:
JAVA_HOME=/usr/java/latest CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME
编辑好后,使环境变量生效:
source /etc/profile
以上路径可以在以下检查安装软件的位置可以查到:
2、使用jemter
去下载:https://jmeter.apache.org/download_jmeter.cgi
下载:
wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.3.tgz
解压:
tar -xvf apache-jmeter-5.3.tgz
用cli模式运行并加载测试模板,最后生成html报告:
cd apache-jmeter-5.3.tgz && bin/jmeter -n -t Test\ Plan.jmx -l result.jtl -e -o ./html
参数:
# -n:以非GUI形式运行Jmeter # -t:运行JMX测试计划脚本文件的路径 # -l:运行结果保存路径(.jtl),此文件必须不存在
# -j: jmeter运行日志
# -r: 运行分布式压测服务器,指明用jmeter属性"remote_hosts"
# -R:运行分布式服务器,其后跟着服务器列表 # -e:在脚本运行结束后生成html报告,此参数要与-l一起使用。 # -o:用于存放html报告的目录,此目录必须为空。此参数与-e一起使用。
测试模板请在本机window下运行jmeter GUI来生成,保存后再上传到测试服务器上。
而实际测试建议使用CLI模式下运行。
3、压测中的线程属性说明
线程数:指测试时要发起压测的线程数量,相当于模拟访问用户数。如果是分布式压力测试,则每台压测服务器都会按这个数量产生线程,而不是整个测试的总线程数。
Ramp-Up时间:所有线程创建完成所需的时间,以上方30秒设置为例,则30秒时间产生10000个线程,每秒则产生10000/30 = 约 999 条线程;
循环次数:每个线程循环执行的次数,勾选“永远”则表示不限次数地循环执行,一直到下方的“持续时间”结束为止,如果所有线程循环完预定的次数,则当前测试就会停止了,就算下方的“持续时间”到了实际测试也已经是完成了。
持续时间(秒):当勾选“调度器”时,表示整个测试要持续执行的时间。实际测试时并非完全遵循此时间结束,如果上方的“循环次数”设置一个数值时,就算已经在测试时已经过了设定的持续时间,如果线程未循环完预定的循环次数,仍然会循环执行完为止。
启动延迟(秒):测试开始时需延迟多少秒才开始。
“same user on each iteration":表示每次循环是否使用同一用户(即同一线程)执行,这对于web测试是否需要保持同一会话时有用;
”延迟创建线程直到需要“:如选项如果勾选,则在Ramp-Up时间结束后等所有线程都启动完毕才开始执行测试,如果Ramp-Up时间未结束时,已创建的线程则在等待状态,并未开始执行测试。实际测试中,此选项几乎不会影响测试结果 。
4、分布式测试
由于单台压测服务器并不足以进行创建过多线程时,则可以使用分布式测试。将所有测试线程都由各台压测服务器同时产生,并将测试结果返回到控制服务器。控制服务器与压测服务器可以是同一台服器。
要求:
1、压测服务器、控制服务器、被测试服务器要在同一内网;
2、压测服务器、控制服务器安装的java版本一致;
3、压测服务器、控制服务器运行的jmeter版本一致;
压测服务器、控制服务器的jmeter的SSL设置:
所有压测服务器与控制服务器的通讯,默认以ssl证书通讯。
可以在控制服务器中使用./create-rmi-keystore.sh 命令(jmeter软件中附带)产生.jks后缀名的证书,将此证书存放到各压测服务器的jmeter软件的bin目录下。
个人不太建议使用SSL证书通讯方式,本人实际测试时,在1099端口开放并未占用的正常情况下,压测服务器并未收到控制服务器的测试指令的问题,用telnet测试却是端口并无问题。。
所以个人建议在jmeter.properties配置文件中,关闭SSL选项:
server.rmi.ssl.disable=true
注意,每台压测服务器和控制服务器都要修改此选项。这样就不需要SSL证书了。
在每台压测服务器上运行压测服务:
./jmeter-server -Djava.rmi.server.hostname=内网IP
示例:
在控制服务器上,设置压测服务器IP。打开jmeter.properties文件,修改remote_hosts配置值:
多台压测服务器之间用逗号相隔。1099是默认通讯端口,可省略写入。如果压测服务器的侦测端口已修改,则必须写上端口。
测试端口是否被占用:
netstat -tunlp |grep 1099
一切准备就绪。在控制器启动测试:
./jmeter -n -t ./Test_Plan.jmx -r -l ./result.jtl -e -o ./html
Test_Plan.jmx是测试计划文件, result.jtl是测试结果文件。
一些问题总结:
(1)如果遇到 open too many files,说明遇到打开文件最大值问题。可进行如下设置:
echo "ulimit -HSn 65536" >> /etc/rc.local echo "ulimit -HSn 65536" >> /root/.bash_profile ulimit -HSn 65536
(2)如果遇到out of memory异常,则增大JVM内存池。编辑jmeter文件,找到:
增加内存池大小,如:
(3) 如果测试过程中需要停止测试,正常情况下可以使用./stoptest.sh(window: stoptest.cmd)停止。如果某些异常导致无法正常停止,则直接kill掉测试进程。
其他:
检查TCP/IP连接状态和对应个数:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a, s[a]}'
参考:
https://blog.csdn.net/qq_41907450/article/details/84143601
https://blog.csdn.net/chenlin465373800/article/details/78924780