阿里云 centos7.4 (1核2G)
上传本地jdk文件
scp .\jdk-8u65-linux-x64.rpm root@*.*.*.*://tmp/
赋予可执行权限
chmod 777 jdk-8u65-linux-x64.rpm
安装rpm文件 此时系统会自动配置环境变量
rpm -ivh jdk-8u65-linux-x64.rpm
手动配置环境变量
vim ~/.bash_profile
添加
JAVA_HOME=//usr/java/jdk1.8.0_65
PATH=$PATH:$JAVA_HOME/bin
刷新环境变量 否则需要重新登录服务器配置才能生效
source ~/.bash_profile
下载安装mysql
yum install mysql*
centos7中已经用mariadb server替代了mysql server,所以必须要安装mariadb server
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
yum install mariadb-server
启动mysql服务器
systemctl start mariadb.service
查看mysqld进程是否启动
systemctl start mariadb.service
通过3306端口查看mysqld是否启动
netstat -anp | grep 3306
重置mysql的root用户密码
mysqladmin -u root password root
尝试连接mysql
mysql -uroot -proot
win查看mysql安装位置
show variables like "%char%";
备份mysql问sql文件
./mysqldump -uroot -proot --databases seckill > C:\Users\z1161\Desktop\seckill.sql
上传sql文件并回复数据库(管道操作)
mysql -uroot -proot < //tmp/seckill.sql
利用mvn clean package命令在项目根目录打jar包
<plugins>
//此插件不能打包依赖
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
//加入此插件后能打包依赖
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
修改权限并尝试启动
mv //tmp/seckill-1.0-SNAPSHOT.jar //var/www/seckill/seckill.jar
chmod -R 777 *
java -jar seckill.jar
外挂配置文件:application.properties 同名外挂配置文件的优先级高于内置配置文件
server.port=80
外挂配置文件的启动方式
java -jar seckill.jar --spring.config.addition-location=/var/www/seckill/application.properties
编写deploy.sh启动脚本用于后台启动jar包
nohup命令表示console退出程序也不会退出 并将输出写到nohup.out文件
最大最小堆栈都设置为400m 并且指定200m以及最大为200m的新生代JVM
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar seckill.jar --spring.config.addition-location=/var/www/seckill/application.properties
更改该目录下所有文件的执行权限
chmod -R 777 *
在后台启动应用程序
./deploy.sh &
查看输出
tail -200f nohup.out
线程组 Http请求 查案结果树 聚合报告
根据进程名查看进程号
ps -ef | grep java
root 30274 1 0 00:59 ? 00:00:16 java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar seckill.jar --spring.config.addition-location=/var/www/seckill/application.properties
根据进程号查看端口号
netstat -anp | grep 30274
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 30274/java
修改hosts文件的DNS解析
win:
C:\Windows\System32\drivers\etc\hosts
linux:
//etc/hosts
jemeter要勾选keep alive 建立长连接
支持高并发且快速返回的系统即为高性能系统 总并发数除以每个并发所耗的时间即TPS
TPS是每秒事务数(TransactionsPerSecond),也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
平均TPS:用聚合报告中Throughput表示
耗时的操作看这两个指标:load average: 0.11, 0.05, 0.05 %Cpu(s): 1.4 us, 1.7 sy,
根据进程名查看进程号
ps -ef | grep java
root 30274 1 0 00:59 ? 00:00:16 java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar seckill.jar --spring.config.addition-location=/var/www/seckill/application.properties
查看该进程的线程数,此时显示的线程数为tomcat的线程数加上springboot的线程数之和
pstree -p 30274 | wc -l
修改springboot内嵌的tomcat默认配置(spring-configuration-metadata.json 有三个此文件 选择超过8000行的) 以提高并发线程数
server.tomcat.accept-count:等待队列长度,默认100
server.tomcat.max-connections:最大可被连接数,默认10000
server.tomcat.max-threads:最大工作线程数,默认200
server.tomcat.min-spare-threads:最小工作线程数,默认10
默认配置下,连接超过10000后出现拒绝连接情况
默认配置下,触发的请求超过200+100后拒绝处理
对于4核8G的单机 最优配置为
server.tomcat.accept-count=1000
server.tomcat.max-connections=10000
server.tomcat.max-threads=800
server.tomcat.min-spare-threads=100
keepalive缺点:
1.一直连接但如果不使用则浪费资源
2.成为系统的后门被攻击
keepAliveTimeOut:多少毫秒后不响应的断开
keepalivemaxKeepAliveRequests:多少次请求后keepalive断开失效
使用WebServerFactoryCustomizer定制化内嵌tomcat配置:
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory configurableWebServerFactory) {
//使用对应工厂类提供给我们的接口定制化我们的tomcat connector
((TomcatServletWebServerFactory) configurableWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
//定制化keepalivetimeout 设置30秒内没有请求则服务器自动断开keepalive连接
protocol.setKeepAliveTimeout(30000);
//当客户端发送超过10000个请求则自动断开keepalive连接
protocol.setMaxKeepAliveRequests(10000);
}
});
}
}
MySql数据库QPS容量问题:尽量保证所有查询为主键查询和唯一索引查询
主键查询:千万级别数据= 1-10毫秒
唯一索引查询:千万级别数据=10-100毫秒
非唯一索引查询:千万级别数据=100-1000毫秒
无索引:百万条数据= 1000毫秒+
MySql数据库TPS容量问题:
非插入的更新删除操作∶同查询
插入操作:1w ~ 10w tps(依赖配置优化)