秒杀升级
一、云端部署
1、配置jdk
vim ~/.bash_profile
# -----------------
JAVA_HOME=//usr/java/jdk1.8.0_65
PATH=$PATH:$JAVA_HOME/bin
# -----------------
source ~/.bash_profile
2、安装MySQL
# mysql 数据库的安装 没使用
yum install mysql* -y
yum install mariadb-server -y
systemctl start mariadb.service
yum -y install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb
mysqladmin -u root password root
3、数据库备份
scp C:\Users\888\Desktop\seckillbetter.sql root@8.129.160.65://tmp/
mysql -uroot -proot < //tmp/seckillbetter.sql
4、maven
打包上传到阿里云
mvn clean package
scp seckill-0.0.1-SNAPSHOT.jar root@8.129.160.65:/tmp/
5、创建一个目录存jar文件
mkdir /var/www/seckill
mv /tmp/seckill-0.0.1-SNAPSHOT.jar /var/www/seckll
chmod -R 777 *
6、用外挂配置文件
java -jar seckill-0.0.1-SNAPSHOT.jar --spring.config.addition-location=/var/www/seckill/application.properties
7、编写启动脚本
vim deploy.sh
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar seckill-0.0.1-SNAPSHOT.jar --spring.config.addition-location=/var/www/seckill/application.properties
chmod -R 777 *
./deploy.sh &
二、jmeter性能压测
1、需要的条件
- 线程组
- Http请求
- 查看结果树
- 聚合报告
# 查看该进程有多少线程
pstree -p 5240
# 查看多少数量
pstree -p 5240 | wc -l
2、服务器调优
# 四核八G properties
server.tomcat.accept-count=1000
server.tomcat.max-threads=800
server.tomcat.min-spare-threads=100
// config.java
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
// 使用对应工厂定制化tomcat
((TomcatServletWebServerFactory)factory).addConnectorCustomizers(connector -> {
Http11NioProtocol protocolHandler = (Http11NioProtocol) connector.getProtocolHandler();
// 定制化参数
// 定制化keepalivetimeout,设置30秒没有请求则服务器自动断开 keepalive
protocolHandler.setKeepAliveTimeout(30000);
// 当客户端发送超过10000个请求则自动断开keepalive连接
protocolHandler.setMaxKeepAliveRequests(1000);
});
}
}
线程数量:4核 cpu
8G 内存单进程调度线程数 800 - 1000 以上后即花费巨大的时间在 cpu
调度上
等待队列长度:队列做缓冲池用,但也不能无限长,消耗内存,出队入队也消耗 cpu
3、MySQL的QPS问题
- 主键查询:千万级数据= 1 ~ 10ms
- 唯一索引查询:千万级别数据 = 10 ~ 100ms
- 非唯一索引查询:千万级别数据 = 100 ~ 1000ms
- 无索引:百万条数据 = 1000毫秒 +
4、MySQL的TPS问题
- 非插入更新删除操作:同查询
- 插入操作:1w ~ 10w TPS (依赖配置优化)