项目场景:多用户同时访问页面,大量用户同时进入导致列表页面无法加载出来和二维码详情页二维码无法打开.
描述: 列表页会加载此用户所有拥有的二维码门票列表,用户点击单个二维码将进入二维码详情页面,此页面会查询很多次将详情页面所有需要的数据加载至页面上,访问数据库的操作比较多
问题描述:访问登录页面,二维码列表页,二维码详情页很慢
原因分析:
1 首先肯定是大量用户同时登陆注册进入系统导致系统负载变大,系统执行效率很低
2 二维码会在服务器端进行base64位加密, 这个加密操作很消耗时间
3 代码优化
解决方案:
- 首先增大了服务器内存和CPU ,扩展完服务器后cpu占用降低至30%左右, 内存占用20%吧好像,扩增完之后服务器负荷已经减少很多,但是项目执行访问效果并不如意,
- 负载均衡 nginx 两个服务器切换使用
- 优化Tomcat 增大内存 增大并发数量 默认200 直接增大至5000 但是实际测试好像没什么用
- 优化代码 将多个请求合并 请求二维码和二维码覆盖的请求合并 但是后来又取消合并了 认为同时加载二维码和查询日志记录表会很慢 还不如拆分开来获取二维码更快
- 优化mysql 建立查询索引 日志表 建立多行索引 多列索引比单列索引查询效率更高
ALTER TABLE 表 ADD INDEX 索引名( 列1, 列2,列3)
这些操作做完之后实际效果并不如意,明天看看再说
202010月12日更新进度
- 系统在配置四台服务器搭建Nginx负载均衡后系统趋于稳定,今日未发生任何异常状态, 当然在临时搭建负载均衡的同时也会出现问题,
- 问题1, 负载均衡配置完成后在项目中的访问服务器地址比如一些写死的服务器地址可能会由于负载均衡需要进行调整
- 问题2, 单机器不需要考虑session问题,一些数据是直接储存在session中的,当页面进行切换的时候很有可能导致机器间互相跳转而导致的session丢失或者状态丢失问题,所以最好还是要开启IP黏着. 避免不必要的问题
- 根据此次状态,在日常编写代码的过程中一定要将任何有可能发生变化的字符串类型的数据统一编写,不要心存任何侥幸心理认为只有这一个地方是有为了省事就不统一.