Tomcat6 Session建立机制简要

时间:2023-03-09 21:05:00
Tomcat6 Session建立机制简要
底:
  测试部门做压力测试, 结果没多久新闻,出现OutOfMemory.
 查找原因,通过监视工具,查找StandardSession(org.apache.catalina.session.StandardSession)对象不断增长,毫无疑问,肯定是在不断创建Session对象.
备注:一般做压力測试,每次请求都不会指定JESSESIONID值,导致Web容器觉得每次请求都是新的请求,于是创建Session对象.
同事负责代码Review,发现应用没有不论什么一个地方存放Session内容.困惑之...

问题:Tomcat容器何时创建Session对象?


想当然觉得,唯独动态存放Session内容的时候,才会创建Session对象.可是事实真得如此吗?

先看Servlet协议描写叙述:
请看:
)
            return;

threadDone = false;
        String threadName = "ContainerBackgroundProcessor[" + toString() + "]";
        thread = new Thread(new ContainerBackgroundProcessor(), threadName);
        thread.setDaemon(true);
        thread.start();

}

准确地讲,除非你的应用全然不须要保存状态(无状态应用),不然地话,只要有一个新的连接过来,web容器都须要创建Session概念,维护状态信息.
可是Session是什么?Session不过一个概念:"Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user."--简单地讲,保存用户状态信息.
所以说,我们全然能够依据应用的需求,定制Session的实现:
a. Session保存到JVM内容中--Tomcat默认的实现
b. Session保存到Cookie中--Cookie-Based Session
c. Session保存到本地文件--Tomcat提供的非默认实现之中的一个
d. Session保存到Cache Store中--比方常见的Memcached
e. Session保存到数据库中--比方保存到mysql数据库session表,中间对于活跃的Session 缓存到cached中.
......
那么,假如一个应用有大量一次性不同用户的请求(不过一次性的,比方上文章描述了现场如上所述),然后选择c,d,e程序可以是本文所述的有效的解决方案描述的问题.

版权声明:本文博主原创文章。博客,未经同意不得转载。