第二章 云端部署

第二章 云端部署

数据库部署

  • 启动服务器的数据库服务
systemctl start mariadb.service

Untitled

  • miaosha 数据库表备份
/usr/local/mysql/bin/mysqldump -uroot -p283619 --databases miaosha > ~/Downloads/miaosha.sql

Untitled

  • 然后将备份文件,上传到服务器中
  • 将文件在服务器中执行一遍,相当于导入表结构和表数据到服务器的数据库
mysql -uroot -p283619 < //tmp/miaosha.sql

Untitled

打包上传

  • 使用 IDEA 自带的 maven 进行打包,生成 miaosha-1.0-SNAPSHOT.jar 文件

Untitled

  • 注意要记得添加 Spring Boot maven 打包的 plugin,不然打包后运行失败

Untitled

  • 上传 miaosha-1.0-SNAPSHOT.jar 文件到服务器中

Untitled

  • 移动 miaosha-1.0-SNAPSHOT.jar 文件到我们自己新建的目录下,重命名为:miaosha.jar ,然后给当前目录授予读写和可执行权限

Untitled

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

Untitled

  • 新建 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 文件

Untitled

  • 前台实时查看 nohub.out 文件内容:
tail -f nohup.out

Jmeter 性能压测

  • 线程组
  • Http请求
  • 查看结果树
  • 聚合报告

具体步骤

  • 添加线程组

Untitled

Untitled

  • 创建HTTP请求

Untitled

  • 添加对应的结果树

Untitled

  • 添加聚合报告

Untitled

组装 Http 请求,模拟压测

Untitled

sudo vim //etc/hosts //本机电脑添加一个映射到服务器ip地址的域名
43.138.131.175 miaoshaserver //当客户端访问miaoshaserver,会自动在host文件里面查找到对应的ip地址

Untitled

Untitled

Untitled

  • 压测1000个线程启动时间为10s 运行10次

Untitled

优化系统

设置 tomcat 参数

线程数

首先打开 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 个线程数量了

Untitled

  • 400 个并发情况下的压测

Untitled

KeepAlive

  • KeepAliveTimeOut : 多少毫秒后若客户端不响应则断开对应的连接
  • MaxKeepAliveRequests : 多少次请求后连接失效
  • 使用 WebServerFactoryCustomizer<ConfigurableWebServerFactory> 定制化内置 tomcat配置
//当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,
// 会把此bean加载到Spring中
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
    @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);
            }
        });
    }
}

单Web容量上限

  • 线程数量:对于4核CPU 8G内存的服务器来说,配置800~1000个线程是最好的,再多的话就会消耗在cpu调度上
  • 等待队列长度:一般为1000~2000,队列做缓冲池用,但也不能无限长,队列太长还消耗内存,而且出队入队也消耗cpu

MySQL 数据库QPS容量问题

  • 主键查询:千万级别数据 = 1-10毫秒
  • 唯一索引查询:千万级别数据 = 10-100毫秒
  • 非唯一索引查询:千万级别数据 = 100-1000毫秒
  • 无索引:百万条数据 = 1000毫秒 +

MySQL 数据库TPS容量问题

  • 非插入更新删除操作:同查询
  • 插入操作:1w~10w tps (依赖配置优化,后续)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值