- 启动服务器的数据库服务
systemctl start mariadb.service
- 将 miaosha 数据库表备份
/usr/local/mysql/bin/mysqldump -uroot -p283619 --databases miaosha > ~/Downloads/miaosha.sql
- 然后将备份文件,上传到服务器中
- 将文件在服务器中执行一遍,相当于导入表结构和表数据到服务器的数据库
mysql -uroot -p283619 < //tmp/miaosha.sql打包上传
- 使用 IDEA 自带的 maven 进行打包,生成 miaosha-1.0-SNAPSHOT.jar 文件
- 注意要记得添加 Spring Boot maven 打包的 plugin,不然打包后运行失败
- 上传 miaosha-1.0-SNAPSHOT.jar 文件到服务器中
- 移动 miaosha-1.0-SNAPSHOT.jar 文件到我们自己新建的目录下,重命名为:miaosha.jar ,然后给当前目录授予读写和可执行权限
mkdir www // 新建一个www目录 pwd www // 查询当前目录,/var/www mv /目录1 /目录2 // 移动目录1的文件到目录2下 chmod -R 777 * // 给当前目录授予读写和可执行权限 tail -f nohup.out // 查看运行日志 ps -ef | grep java // 查看当前运行的java进程(包含进程号) netstat -anp | grep 1302 // 查看进程号为1302的端口号 netstat -lntp // 查看开放端口号编写 deploy 脚本
编写deploy脚本,实现自动打包上传并java执行的操作。
服务端 SpringBoot 配置文件 application.properties 里面的配置可能随着设备环境的不同而发生变化,每次直接修改源码又很复杂,可以采用外挂配置文件的方式。
- 在项目目录下新建 vim application.properties 外挂配置文件,修改文件,指定服务器端口server.port=80
- 执行 java -jar miaosha.jar --spring.config.addition-location=/var/www/miaosha/application.properties
- 新建 deploy.sh 文件,编辑 nohup 指令,设置最大/最小堆栈为 400m,JVM新生代 200m,最大新生代 200m,指定额外配置文件
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar miaosha.jar --spring.config.addition-location=/var/www/miaosha/application.properties
- 重新给当前目录授予读写和可执行权限
chmod -R 777 *
- 后台方式启动应用程序 ./deploy.sh & 避免关闭控制台,应用程序关闭的风险。输出 nohup.out 文件
- 前台实时查看 nohub.out 文件内容:
tail -f nohup.outJmeter 性能压测
- 线程组
- Http请求
- 查看结果树
- 聚合报告
具体步骤
- 添加线程组
- 创建HTTP请求
- 添加对应的结果树
- 添加聚合报告
组装 Http 请求,模拟压测
sudo vim //etc/hosts //本机电脑添加一个映射到服务器ip地址的域名 43.138.131.175 miaoshaserver //当客户端访问miaoshaserver,会自动在host文件里面查找到对应的ip地址
- 压测1000个线程启动时间为10s 运行10次
首先打开 SpringBoot 内置的 tomcat 配置,在 spring-configuration-metadata.json 里面,有几个参数特别重要:
- server.tomcat.accept-count :等待队列长度:默认是100
- server.tomcat.max-connections:最大可被连接数,默认10000
- server.tomcat.max-threads:最大工作线程数,默认200
- server.tomcat.min-spare-threads:最小工作线程数,默认10
- 默认配置下,连接超过10000后出现拒绝连接
- 默认配置下,触发的请求线程超过200 + 100后拒绝处理
server.port=80 server.tomcat.accept-count=1000 server.tomcat.max-threads=800 server.tomcat.min-spare-threads=100
- 设置以上参数后,我们的操作系统可以有充足的时间进行反应,把这100个线程先用着,然后再慢慢开到800个线程,满了再丢到1000个等待队列里面,超过1800个线程后就拒绝处理,连接超过10000后就拒绝连接。
- 结果展示:可以提高到 118 个线程数量了
- 400 个并发情况下的压测
- KeepAliveTimeOut : 多少毫秒后若客户端不响应则断开对应的连接
- MaxKeepAliveRequests : 多少次请求后连接失效
- 使用 WebServerFactoryCustomizer
定制化内置 tomcat配置
//当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时, // 会把此bean加载到Spring中 @Component public class WebServerConfiguration implements WebServerFactoryCustomizer单Web容量上限{ @Override public void customize(ConfigurableWebServerFactory factory) { // 使用对应工厂类提供给我们的接口定制化我们的tomcat connector ((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { Http11NioProtocol protocolo = (Http11NioProtocol) connector.getProtocolHandler(); // 设置 keepalivetimeout 超过30秒没有请求则服务端自动断开keepalive连接 protocolo.setSelectorTimeout(30000); // 当客户端发送超过10000个请求则自动断开keepalive连接 protocolo.setMaxKeepAliveRequests(10000); } }); } }
- 线程数量:对于4核CPU 8G内存的服务器来说,配置800~1000个线程是最好的,再多的话就会消耗在cpu调度上
- 等待队列长度:一般为1000~2000,队列做缓冲池用,但也不能无限长,队列太长还消耗内存,而且出队入队也消耗cpu
- 主键查询:千万级别数据 = 1-10毫秒
- 唯一索引查询:千万级别数据 = 10-100毫秒
- 非唯一索引查询:千万级别数据 = 100-1000毫秒
- 无索引:百万条数据 = 1000毫秒 +
- 非插入更新删除操作:同查询
- 插入操作:1w~10w tps (依赖配置优化,后续)



