zoukankan      html  css  js  c++  java
  • 一次使用jmap评估是否可以把类似session信息挂靠在某未知框架的某暴露对象上

    有一个需求,要在内存里缓存当前用户信息,我们不被允许直接访问session,原有框架只暴露了一个App对象,我们想把用户信息挂靠该对象,我们需要确定:

    1 该对象是否用户相关,还是用户无关;如果是用户无关,哪个用户进来,框架暴露同一个app对象,那么自然无法使用
    2 用户下线后,该对象是否会回收,否则发生内存泄漏

    使用 jmap -histo:live pid 强制gc后导出内存各类对象的文本信息,检查对象数量

    (后来发现该类被guice代理增强,com.xxx.App$$EnhancerByGuice$$528a0e1a)

    步骤:
    0 初始状态,app为0


    1 每次浏览器打开,是否app+1
    打开chrome,app+1,打开ie,app再+1

    证明了该对象用户相关,非单例


    2 cookie+1,是否app+1
    电脑只有2个浏览器,能够模拟的用户上限达到了,为模拟更多的用户与app对象,有此猜想
    干掉chrome的cookie,刷新,app+1


    3 浏览器关闭,app-1
    模拟用户下线,查看app对象及用户信息能否被回收
    显示app未-1


    4 session清除,app-1
    通过第3点,可以基本确认网站未用websocket监控用户上下线,那么就是session了
    此前我们一共有3个用户,干掉2个session,显示app-2

    至此,确认,我们可以将用户信息绑定在app对象上,而且用户下线session搁置一段时间后(一般30分钟),session自然过期,相应的app对象解除gcroot,在下一次gc中将被回收,绑在上面的用户信息一同回收。

  • 相关阅读:
    正则表达式-汉字的匹配方法
    python 正则匹配中文(unicode)(转)
    Notepad++ 快捷键 大全
    gvim 编辑器配置
    gvim代码补全
    UNICODE,GBK,UTF-8区别
    AJAX
    day 75 中间件
    Cookie和Session 装饰器的修复技术
    必知必会13条 单表查询之双下划线 ForeignKey操作 ManyToManyField 聚合分组
  • 原文地址:https://www.cnblogs.com/silyvin/p/12668313.html
Copyright © 2011-2022 走看看