最近偶尔发现,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失效的时间。
哎 问题想明白了就这么简单,可是当时就是想不到。
分享到:
相关推荐
Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? Tomcat运行模式 Tomcat的运行模式有3种。 1.bio模式 默认的模式,性能非常...
tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题
tomcat 高并发 1000每秒 服务器优化 高性能 tomcat 高并发 1000每秒 服务器优化 高性能
用于tomcat6 使用memcache 实现session共享的jar包,将此处5个jar包拷贝到tomcat目录下的lib目录下即可。
比如Tomcat5和Tomcat6互相同步Session. 再在Apache的mod_jk模块里,对每个worker配置上redirect和activation属性。 将Tomcat1,Tomcat3,Tomcat5做为对外正常提供服务器的Tomcat, Tomcat2,Tomcat4,Tomcat6作为分别...
用于配置 tomcat-redis-session-manager
修复了redis-session-manager-tomcat6包存入null值的session时报空指针问题。
由于工作原因,用户环境必须使用tomcat6,且想做集群环境,没办法只得找资源,可惜网上tomcat6的资源比较少,而且本人找到的基本都有错误,不能保存session进redis,导致每次测试页面都生成新的sessionid,所以最后...
tomcat5 session 复制
tomcat 集群 nginx 使用redis 保证session同步
tomcat redis session共享,支持tomcat7 jdk7、tomcat8 jdk7、tomcat8 jdk8、tomcat8.5 jdk7、tomcat9 jdk8
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
里面有整套nginx+tomcat6+session共享的文件,包括jar包,网上资料,所需工具等,经本人摸索一天整合而来,希望对大家有所帮助,也赚点辛苦分
tomcat 最大并发数 并发量 tomcat 最大并发连接数 acceptCount不能说只要大于acceptCount的连接就一定被拒绝!
tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制...
tomcat8 redis session共享,提供commons-pool2-2.3.jar,jedis-2.7.2.jar和修改后的tomcat-redis-session-manager-master-2.0.0.jar及部署文档
jdk7+tomcat6+memcached。依赖包
设定tomcat中session过期时间的三种方式
此包由java重新编译过,包含tomcat-redis-session-manager-jre7-tomcat6、jedis-2.7.3、commons-pool2-2.3 附此包在测试环境的亲测记录以及使用方法。 https://www.guoxin-linux.com/post/8.html
此包由java重新编译过,包含tomcat-redis-session-manager-jre7-tomcat6、jedis-2.7.3、commons-pool2-2.3 附此包在测试环境的亲测记录以及使用方法