谷粒商城技术点笔记
页面修改不重启服务器实时更新
1.引入spring-boot-devtools,optional设置为true才生效
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
2.修改完页面 Ctrl + shift + F9 ,重新自动编译下页面。代码配置,推荐重启
Nginx
nginx反向代理
- 正向代理:隐藏客户端信息
- 反向代理:屏蔽内网服务器信息,负载均衡访问
nginx + windows 本地域名访问环境搭建
switchhost : 修改本机host文件
gulimall.com 虚拟机ip
nginx过程回顾
域名解析出ip->根据ip访问虚拟机->nginx监听80端口获取到请求->nginx进行处理代理给网关(需要处理请求头丢失问题)->网关配置跳转地址
nginx代理转发丢失信息
host信息丢失
nginx配置文件
nginx.conf
--全局块:影响nginx全局的指令:如用户组、worker进程...
--events块:影响nginx服务器与用户的网络连接
--http块:日志格式、连接、是否开启压缩
--http全局块:连接超时、upstram、错误页面
--server块:虚拟主机相关信息
--location
--location
--location..
server块
server_name : gulimall.com 监听来自gulimall.com域名下的访问 在请求头Host:gulimall.com
proxy_pass : http://192.168.56.10:10000代理通过(转交请求)
upstream 上游服务器
http{
upstream gulimall{
server 192.168.56.10:88
}
}
server{
proxy_pass http://gulimall;
}
性能压测
压力测试考察当前软硬件环境下系统所能承受的最大负荷并找出系统瓶颈所在。
压测在上线前进行测试能找出问题,如 内存泄漏,并发与同步
有效的压力测试系统将应用以下关键条件:重复、并发、量级、随机变化
1.性能指标
- 响应时间
- HPS:每秒点击数
- TPS:每秒处理交易数(重要)
- OPS:每秒处理查询次数
衡量系统处理能力的指标:吞吐量、响应时间、错误率
一般情况下:
- 金融行业:1000TPS~50000TPS,不包括互联网活动(秒杀等)
- 保险行业:100TPS~100000TPS,不包括互联网活动
- 制造业: 10TPS ~ 5000TPS
- 互联网电子商务:10000TPS ~ 1000000TPS
- 互联网中型网站:1000TPS~50000TPS
- 互联网小型网站:500TPS~10000TPS
2.Jmeter
- 测试计划
- 线程组
- 线程数
- Ramp-up:在此时间内启动完成
- 循环次数
2.1Jmeter端口地址被占用
address in use
3.性能监控
3.1 jvm内存模型
3.2 优化 堆(避免应用发生FullGC)
所有的对象实例以及数组,都要在堆中创建。
新对象申请->伊甸园区放的下(分配对象内存)
->Eden放不下,进行YGC->Eden放得下(分配对象内存)
->Eden放不下,放入Old老年代->老年代放得下(分配对象内存)
->老年代放不下,FullGC->old放得下(分配)
->放不下(报错,内存溢出)
3.3 jvisulavm
CMD -> jvisualvm
3.4 监控结果
优化点:
压测内容 | 压测线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
Nginx | 50 | |||
Gateway | 50 | |||
简单服务 | 50 | |||
首页一级菜单渲染 | 50 | |||
三级分类数据获取 | 50 | |||
首页全量数据获取 | 50 | |||
nginx+gateway | 50 | |||
Gateway+简单服务 | 50 | |||
全链路 | 50 |
中间件越多,性能损失越大,大多都损失在网络交互;
业务:
- DB(mysql优化)
- 模板渲染速度
- 静态资源
缓存
1.缓存的使用
DB承担数据落盘工作。
缓存数据:即时性、数据一致性要求不高;访问量大且更新频率不高
2.缓存压测,内存溢出(OutOfDirectoryMemoryError,堆外内存溢出)
springboot2.0以后默认使用Lettuce作为操作redis的客户端,它使用netty进行网络通信
Lettuce的bug导致netty堆外内存溢出;netty如果没有制定堆外内存,默认使用-Xmx300m
解决方案:不能使用-Dio.netty.maxDirectMemory只去调大堆外内存
1)升级Lettuce客户端;2)切换使用Jedis