Chinaunix首页 | 论坛 | 博客
  • 博客访问: 395900
  • 博文数量: 99
  • 博客积分: 5134
  • 博客等级: 大校
  • 技术积分: 1607
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 09:31
文章分类

全部博文(99)

文章存档

2011年(48)

2010年(40)

2009年(10)

2008年(1)

分类:

2010-01-12 00:06:27

Tomcat6在高并发下要注意关闭session

关键字: tomcat, 内存泄漏
最近偶尔发现,Tomcat6竟然在高并发下有内存泄露现象。这样看来Tomcat6确实不适合用在企业网站上。
得到这一结论的场景如下:用测试工具不停的访问一个jsp页面。jsp很简单,内容如下:
Java代码 复制代码
  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>   
  3. "-//W3C//DTD HTML 4.01 Transitional//EN" "">   
  4.   
  5.   
  6. "Content-Type" content="text/html; charset=GBK">   
  7. TestJSP   
  8.   
  9.   
  10. Test   
  11.   
  12.   

测试用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失效的时间。
哎 问题想明白了就这么简单,可是当时就是想不到。
 
 
 
 
 
 
 

在tomcat中设置session过期时间

1. 在\conf\web.xml中通过参数指定:

    
    180      
  

单位为分钟。

2. 在程序中通过servlet api直接修改:

HttpSession session = request.getSession();   
session.setMaxInactiveInterval(180*60);
单位为秒,设置为-1永不过期。
 
3. 在——>conf——>servler.xml文件中定义:

  defaultSessionTimeOut="3600" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>
defaultSessionTimeOut="3600"

阅读(2955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~