原因1:
似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开
原因2:
Session的时间设置是不是有问题,会不会因为超时造成丢失
原因3:
IE中的cookie数量限制(每个域20个cookie)可能导致session丢失
原因4:
session丢失很正常,即使设定了过期时间,如果服务器内存不够,服务器仍然会提前释放session ,可能导致session丢失
send.Redirect之后,session的值就丢了,高版本Tomcat5.5就正常了
解决:
保存到COOKIES中,程序开始时判断是否为NULL,为NULL就重新赋值,这样应该就不会出现那样的情况了
------------------------------------------------------------
1.可以server.xml设置并发连接个数
2.session大小局限于你的可分配内存
3.关闭了浏览器,需过一段时间session才销毁
4.在web.xml可设置timeout
测试用100并发用户(绝对并发)、跑上十分钟Tomcat就Over了。加大Tomcat使用的虚拟机内存到512M,测试也撑不过半个小时。
在压力不是很大的情况下(100在线用户,每隔3秒访问一次jsp页面),倒是不会出现问题。
测试时用的jdk版本为sun的1.5.0_12。Tomcat6.0.14、6.0.13都存在此问题。而版本较低的5.0反而没有此问题。5.5版本据同事说也有同样的问题存在。
--------------------------------------------------------
华丽的分割线
--------------------------------------------------------
今天发现outofmemeory的原因了。
并不是tomcat的bug,问题出在session上。不停的访问一个jsp页面后,此jsp页面产生了大量的session存放在内存里,从而导致outofmemory。
在jsp页面中加上<%@ page session="false" %>就好了,或者测试时模拟用户访问时都模拟为一个浏览器进程,这样tomcat就不会重复的创建session了。
当然也可以限制session失效的时间。
哎 问题想明白了就这么简单,可是当时就是想不到。
似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开
原因2:
Session的时间设置是不是有问题,会不会因为超时造成丢失
原因3:
IE中的cookie数量限制(每个域20个cookie)可能导致session丢失
原因4:
session丢失很正常,即使设定了过期时间,如果服务器内存不够,服务器仍然会提前释放session ,可能导致session丢失
send.Redirect之后,session的值就丢了,高版本Tomcat5.5就正常了
解决:
保存到COOKIES中,程序开始时判断是否为NULL,为NULL就重新赋值,这样应该就不会出现那样的情况了
------------------------------------------------------------
1.可以server.xml设置并发连接个数
2.session大小局限于你的可分配内存
3.关闭了浏览器,需过一段时间session才销毁
4.在web.xml可设置timeout
5.datasource放在servletContext中吧,放在session中无法想像
-------------------------------------------------------------
最近偶尔发现,Tomcat6竟然在高并发下有内存泄露现象。这样看来Tomcat6确实不适合用在企业网站上。
得到这一结论的场景如下:用测试工具不停的访问一个jsp页面。jsp很简单,内容如下:
- <%@ page language="java" contentType="text/html; charset=GBK"
- pageEncoding="GBK"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GBK">
- <title>TestJSP</title>
- </head>
- <body>
- Test
- </body>
- </html>
测试用100并发用户(绝对并发)、跑上十分钟Tomcat就Over了。加大Tomcat使用的虚拟机内存到512M,测试也撑不过半个小时。
在压力不是很大的情况下(100在线用户,每隔3秒访问一次jsp页面),倒是不会出现问题。
测试时用的jdk版本为sun的1.5.0_12。Tomcat6.0.14、6.0.13都存在此问题。而版本较低的5.0反而没有此问题。5.5版本据同事说也有同样的问题存在。
--------------------------------------------------------
华丽的分割线
--------------------------------------------------------
今天发现outofmemeory的原因了。
并不是tomcat的bug,问题出在session上。不停的访问一个jsp页面后,此jsp页面产生了大量的session存放在内存里,从而导致outofmemory。
在jsp页面中加上<%@ page session="false" %>就好了,或者测试时模拟用户访问时都模拟为一个浏览器进程,这样tomcat就不会重复的创建session了。
当然也可以限制session失效的时间。
哎 问题想明白了就这么简单,可是当时就是想不到。
参考:http://sdyouyun.iteye.com/blog/146275
http://stackoverflow.com/questions/15755851/nginx-and-tomcat-with-memcached-session-manager-config-context-cookies-false