目录
第四章秒杀压测
1.SpringBoot打包
1.1SpringBoot打jar包
1.2SpringBoot打war包
2.JMeter
2.1Windows下使用
2.2命令行下使用
3.自定义变量模式多用户
4.Redis压测工具redis-benchmark
综述
注意把packaging标签改为jar,此标签也可不写,springboot默认打包方式为jar。
com.example
springboot-upload
0.0.1-SNAPSHOT
jar
//注意把packaging标签改为jar,此标签也可不写,默认打包方式为jar。
org.springframework.boot
spring-boot-maven-plugin
true
使用idea打包: 在IDEA
右侧Maven Projects
栏双击package
等待Build Success
即可
使用命令行打包:
a.黑窗口cd到根目录(和pom.xml
、target
同级),也可在idea工具中选择Terminal
b.执行打包命令 mvn clean package
(跳过测试类命令 mvn clean package -Dmaven.test.skip=true
)
c.打包成功结果如下
运行jar包
java -jar jar包的名字.jar
pom.xml
中把jar
改成war
,并且添加外置tomcat
依赖
war
org.springframework.boot
spring-boot-starter-tomcat
provided
在这里将 scope
属性设置为provided
,这样在最终形成的 WAR
中不会包含这个JAR
包,因为Tomcat
或Jetty
等服务器在运行时将会提供相关的API
类。
在入口类中继承SpringBootServletInitializer
并重写configure
方法
@SpringBootApplication
public class SpringbootUploadApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootUploadApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(SpringbootUploadApplication.class);
}
}
输入命令 mvn clean package
打包,把target
目录下生成的war
放到tomcat
的webapps
目录下即可。
运行tomcat就可以访问了
基本结构有一个线程组包含:HTTP请求,HTTP请求默认值,CSV数据文件设置,聚合报告等。我们接下来说一下常用的操作。
线程组:可以设置线程数和循环次数
HTTP请求默认值:常用于设置域名或ip、端口号、协议,还可以添加参数
聚合报告:会显示吞吐率也就是我们常说的QPS
CSV数据文件设置:从文件中读取数据
数据文件如图
而对应改变的就是http请求的参数
1.在windows下录制好jmx,上传(设置好所用请求和参数)
2.命令行:sh jmeter.sh -n -t XXX.jmx -l result.jtl
3.把result.jtl导入jmeter
public class UserUtil {
private static void createUser(int count) throws Exception{
List users = new ArrayList(count);
//生成用户
for(int i=0;i= 0) {
bout.write(buff, 0 ,len);
}
inputStream.close();
bout.close();
String response = new String(bout.toByteArray());
System.out.println(response);
JSONObject jo = JSON.parseObject(response);
String token = jo.getString("data");
System.out.println("create token : " + user.getId());
String row = user.getId()+","+token;
raf.seek(raf.length());
raf.write(row.getBytes());
raf.write("\r\n".getBytes());
System.out.println("write to file : " + user.getId());
}
raf.close();
System.out.println("over");
}
public static void main(String[] args)throws Exception {
createUser(5000);
}
}
Redis 自带了一个叫 redis-benchmark
的工具来模拟 N 个客户端同时发出 M 个请求。 你可以使用 redis-benchmark -h 来查看基准参数。
以下参数被支持:
Usage: redis-benchmark [-h ] [-p ] [-c ] [-n [-k ]
-h Server hostname (default 127.0.0.1)
-p Server port (default 6379)
-s Server socket (overrides host and port)
-a Password for Redis Auth
-c Number of parallel connections (default 50)
-n Total number of requests (default 100000)
-d Data size of SET/GET value in bytes (default 2)
-dbnum SELECT the specified db number (default 0)
-k 1=keep alive 0=reconnect (default 1)
-r Use random keys for SET/GET/INCR, random values for SADD
Using this option the benchmark will expand the string __rand_int__
inside an argument with a 12 digits number in the specified range
from 0 to keyspacelen-1. The substitution changes every time a command
is executed. Default tests use this to hit random keys in the
specified range.
-P Pipeline requests. Default 1 (no pipeline).
-q Quiet. Just show query/sec values
--csv Output in CSV format
-l Loop. Run the tests forever
-t Only run the comma separated list of tests. The test
names are the same as the ones produced as output.
-I Idle mode. Just open N idle connections and wait.
1.redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
向127.0.0.1的6379端口,100个并发连接,100000个请求
2.redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100
存取大小为100字节的数据包
3.redis-benchmark -t set,lpush -q -n 100000
只测试部分操作
4.redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"
只测试某些数值存取的性能
这一章节我们了解了JMeter,我们使用JMeter测试发现在目前,接口性能较差,QPS较低。我们使用redis-benchmark发现,redis的性能比数据库更加快速,说以,我们下一章节将对性能方面进行优化