服务出现了oom:



查看类信息发现char[]类型实例特别多,占用堆内存特别大



跟踪几个char[]实例的GC root,发现都是保存token信息,并且根都是session



然后查看session的个数,发现有63W



我是用100并发压测的为什么会产生那么多个session?我突然想到我们是前后端分离的,那么前端ajax的时候有没有保持session呢,我调试了下发现我们没有保持session

通过计算

100个并发的话,每个产生一个session,10多分钟后oom,差不多就是100(并发数)*2(每个ajax2个sesionId)*10(十分钟)*60(60秒)*5(5个接口)正好60w

发现oom原因,就是因为前后端分离后没有做好保持session的工作

解决方案

方案1:禁用session

优点:修改简单

缺点:使用session的地方需要替换了,假如使用了session的地方比较多,那么修改工作量就会变大

方案2:使用session共享

优点:可以解决每次ajax都要带token的问题,减少数据传输的大小,减轻带宽压力;修改也相对简单

做法

后台

服务提供者中做以下配置

1、导入依赖

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

2、开启session共享(是通过redis来解决的)

spring:
session:
store-type: redis #开启session共享

3、配置redis

redis:
host: localhost
port: 6379
password: 123456

4、在启动类中开启session共享

@SpringBootApplication
@EnableRedisHttpSession //开启session共享

网关中需要做同样的配置

1、导入依赖

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

2、开启session共享(是通过redis来解决的)

spring:
session:
store-type: redis #开启session共享

3、配置redis

redis:
host: localhost
port: 6379
password: 123456

4、配置网关

需要在网关中配置不过滤session

zuul:
routes:
user:
path: /user/**
serviceId: CLOUD-MALL-USER
sensitive-headers: #把sensitive-headers设置为空,session不过滤

5、在启动类中开启session共享

@SpringBootApplication
@EnableFeignClients
@EnableZuulProxy
@EnableRedisHttpSession //开启session共享
前端

1、前端引入axios时,在main.js中做一个全局设置,设置允许携带cookie发起请求。

import axios from 'axios'    //导入axios
axios.defaults.withCredentials = true //全局设置axios允许携带cookie进行访问
Vue.prototype.$axios = axios

最新文章

  1. 【微信开发】公众号后台设置错误导致的微信redirect_uri参数错误【图】
  2. iOS CoreAnimation 核心动画
  3. dhtmlxScheduler日程安排控件
  4. HFSS学习
  5. 判断移动端js代码
  6. Laravel5.1-Eloquent ORM:起步
  7. 【转】Nginx+Tomcat+Memcached集群
  8. Eclipse中添加Android系统jar包
  9. MYSQL简单安装配置
  10. for语句之侦查队挑选人、猴子吃桃、5个小朋友算年龄、1 () 2 () 3 ()4 = 4;问括号里我要填 (- 或 +)问题
  11. PAT 团体程序设计天梯赛-练习集 L2-003. 月饼
  12. Can&#39;t create handler inside thread that has not called Looper.prepare() 终极解决方法
  13. js函数中this的指向
  14. laravel中实现短信发送验证码
  15. jQuery 捕获
  16. 前端工程师的修真秘籍(css、javascript和其它)
  17. es6数组的扩展
  18. php 函数小技巧(一)
  19. Bootstrap3基础 text-muted/success... 辅助类样式 情景文本颜色
  20. 如何写java求和源代码

热门文章

  1. du命令_Linux du命令:查看文件夹和文件的磁盘占用情况
  2. docker创建etcd
  3. docker之rabbitmq delayed message exchange
  4. AC间二层漫游
  5. JS-变量存储
  6. Visual Studio 快速生成构造函数
  7. python 删除大于超过一定时间文件
  8. linux查找服务位置
  9. matplotlib处理数据可是化的时候出现中文显示异常,为[][]的解决方法
  10. django admin 字段设置