[TOC]
私有部署
就是本地的私有化部署,在本机上调试程序,运行成功在本地打包部署云端。
操作系统及运行环境
数据库
应用程序
项目云端部署
操作系统及运行环境
阿里云centos虚拟机(ECS服务器)
数据库
本地备份
mysqldump -uroot -pxxh171015 --databases miaoshaproject >~/Downloads/miaosha.sql
会在 /Downloads 目录下生成 miaosha.sql
上传到服务器上
scp ~/Downloads/miaosha.sql hpms@202.117.35.221:/home/hpms/xxh009
在服务器端恢复
cd ~
mysql -uroot -p123456 <xxh009/miaosha.sql
应用程序
maven打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
mvn clean package
应用程序的jar上传到服务器
scp miaosha-1.0-SNAPSHOT.jar hpms@202.117.35.221:/home/hpms/xxh009
外挂配置文件
加载项目外的application.properties
在项目目录下,新建application.properties文件
vi application.properties
项目目录下运行:
java -jar miaosha-1.0-SNAPSHOT.jar --spring.config.addition-location=application.properties
编写deploy脚本启动
##编写脚本
vi deploy.sh
##运行脚本前赋权限
chmod -R 777 *
##运行脚本
./deploy.sh &
如何关闭
##查看应用该端口的程序,显示的是这个端口号那个进程在使用
lsof -i:$PORT
##关掉对应的应用程序
sudo kill -9 PID
jmeter性能压测
线程组
Http请求
查看结果树
聚合报告
如何发现系统瓶颈问题
发现容量问题
server端并发线程数上不去
hpms@hpms-1:~/xxh009/miaosha$ ps -ef | grep java
hpms 17623 17622 4 20:59 pts/13 00:00:45 java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar miaosha.jar --spring.config.addition-location=~/xxh009/miaosha/application.properties
hpms 17914 15396 0 21:15 pts/13 00:00:00 grep --color=auto java
##可以看17623这个进程上面对应有多少个线程
hpms@hpms-1:~/xxh009/miaosha$ pstree -p 17623
java(17623)─┬─{java}(17624)
├─{java}(17625)
├─{java}(17626)
├─{java}(17627)
├─{java}(17628)
├─{java}(17629)
├─{java}(17630)
├─{java}(17631)
├─{java}(17632)
├─{java}(17633)
├─{java}(17634)
├─{java}(17635)
├─{java}(17636)
├─{java}(17637)
├─{java}(17638)
├─{java}(17639)
├─{java}(17640)
├─{java}(17641)
├─{java}(17642)
├─{java}(17643)
├─{java}(17644)
├─{java}(17645)
├─{java}(17646)
├─{java}(17647)
├─{java}(17648)
├─{java}(17649)
├─{java}(17650)
├─{java}(17651)
├─{java}(17652)
├─{java}(17653)
├─{java}(17654)
├─{java}(17655)
├─{java}(17660)
├─{java}(17661)
├─{java}(17662)
├─{java}(17663)
├─{java}(17664)
├─{java}(17665)
├─{java}(17666)
├─{java}(17667)
├─{java}(17668)
├─{java}(17669)
├─{java}(17670)
├─{java}(17671)
├─{java}(17672)
├─{java}(17673)
├─{java}(17674)
├─{java}(17675)
├─{java}(17676)
├─{java}(17682)
├─{java}(17683)
└─{java}(17684)
##tomcat服务器在没有丝毫压力的情况下内部维护了52个线程
hpms@hpms-1:~/xxh009/miaosha$ pstree -p 17623 | wc -l
52
查看SpringBoot配置
spring-configuration-metadata.json文件下
{
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",
"defaultValue": 100,
"name": "server.tomcat.accept-count",
"description": "Maximum queue length for incoming connection requests when all possible request processing threads are in use.",
"type": "java.lang.Integer"
},
{
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",
"defaultValue": 10000,
"name": "server.tomcat.max-connections",
"description": "Maximum number of connections that the server accepts and processes at any given time. Once the limit has been reached, the operating system may still accept connections based on the \"acceptCount\" property.",
"type": "java.lang.Integer"
},
{
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",
"defaultValue": 200,
"name": "server.tomcat.max-threads",
"description": "Maximum number of worker threads.",
"type": "java.lang.Integer"
},
{
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",
"defaultValue": 10,
"name": "server.tomcat.min-spare-threads",
"description": "Minimum number of worker threads.",
"type": "java.lang.Integer"
}
查看各个节点的配置
server.tomcat.accept-count:等待队列长度,默认100
server.tomcat.max-connections:最大可被连接数,默认10000
server.tomcat.max-threads:最大工作线程数,默认200
server.tomcat.min-spare-threads:最小工作线程数,默认10
默认配置下,连接超过 10000 后出现拒绝连接情况
默认配置下,并发的请求数量超过 200(max-threads)+ 100(accept-count)后拒绝处理
当对应的所有的工作线程全部用完后,tomcat会将之后的请求丢到 accept-count 这个等待队列中,当等待队列还被塞满,对应的请求会被拒绝
修改配置
4核8G内存tomcat的最大线程数是:800
hpms@hpms-1:~/xxh009/miaosha$ cat application.properties
server.port=8080
server.tomcat.accept-count=1000
server.tomcat.max-threads=800
server.tomcat.min-spare-threads=100
再次查看java进程PID
hpms@hpms-1:~/xxh009/miaosha$ ps -ef |grep java
hpms 18945 18944 92 22:18 pts/13 00:00:39 java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar miaosha.jar --spring.config.addition-location=~/xxh009/miaosha/application.properties
hpms@hpms-1:~/xxh009/miaosha$ pstree -p 18945|wc -l
139
上面我们可以看到是52
当再次压测时
线程数:2000
Rame-up时间:10
循环次数:100
此时
服务端
hpms@hpms-1:~/xxh009/miaosha$ pstree -p 18945|wc -l
842
定制化内嵌Tomcat开发
关注参数:
keepAliveTimeOut:多少毫秒后不响应断开keepalive
maxKeepAliveRequests:多少次请求后keepalive断开失效
使用WebServerFactoryCustomizer< ConfigurableServletWebServer >定制化内嵌tomc配置
响应时间变长 TPS上不去
单Web容器上限
线程数量: 4核CPU 8G内存单进程调度线程数800-1000以上,后即花费巨大的时间CPU调度上
等待队列的长度:队列做缓冲池,但也不能无限长,消耗内存,出入队也耗CPU
MySql数据库QPS容量问题
主键查询:千万级别数据=1-10毫秒
唯一索引查询:千万级别数据=10-100毫秒
非唯一索引查询:千万级别数据=100-1000毫秒
无索引:百万级别数据=1000毫秒+ (全表扫描)
MySql数据库TPS容量问题
非插入更新删除操作:同查询
插入操作:1W~10w tps