最近偶尔发现,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失效的时间。
哎 问题想明白了就这么简单,可是当时就是想不到。
分享到:
相关推荐
在IT行业中,尤其是在Web应用开发领域,服务器集群和session共享是一个关键问题。当多个服务器共同处理用户请求时,保持用户会话(session)的...同时,这也体现了IT行业对高并发、分布式处理能力的需求以及应对策略。
这种架构在微服务、云环境或高并发场景下特别有用,因为它能够有效地解决分布式系统中的 Session 共享问题。同时,Redis 作为持久化的存储,还提供了数据备份和恢复的能力,增强了系统的健壮性。
这样可以提高可扩展性和数据持久性,尤其适用于分布式部署或高并发的环境。 描述中的文件名 "commons-pool2-2.3.jar" 是Apache Commons Pool库的版本2.3,这是一个通用的对象池服务。对象池是预先创建一组对象并...
在负载均衡场景下,我们可能需要运行多个Tomcat实例,每个实例都在不同的服务器上或者同一服务器的不同端口上,以分散负载。 接下来是Redis,它是一个开源的、基于键值对的数据结构存储系统,常用于缓存和数据库。...
Tomcat是Apache软件基金会下的一个开源项目,是一款广泛使用的Java Servlet容器,它实现了Java EE的Web应用程序规范。在本文中,我们将详细探讨Tomcat 8.5.59版本,这是Tomcat 8.x系列的一个稳定版本,具有诸多改进...
在Linux环境下配置Tomcat集群,主要目的是构建一个能够实现水平扩展、具备高可用性、支持负载均衡以及错误恢复能力的服务架构。通过集群的方式,可以提高系统的稳定性和处理并发请求的能力。 #### 二、许可证与文档...
在实际应用中,我们还需要考虑Session的管理,包括设置Session的超时时间、处理Session失效后的逻辑,以及在高并发环境下如何有效地存储和查找Session数据等。在大型Web应用中,可能还会使用Session复制或Session...
Tomcat支持多种连接器,如APR(Apache Portable Runtime)连接器提供更高效的网络I/O,而NIO(非阻塞I/O)连接器适合高并发场景。 14. **管理工具** Tomcat内置了管理工具,如`manager`应用,允许通过Web界面管理...
3. **连接器优化**:调整连接器(Connector)的属性,如最大连接数(maxConnections)、超时时间(connectionTimeout)等,确保高并发下的高效处理。 4. **JVM参数优化**:使用适当的GC算法(如G1或Parallel GC),...
在IT行业中,构建高可用和高并发的Web应用系统是至关重要的。为了达到这个目标,通常我们会使用负载均衡技术,将流量分散到多个服务器上,形成一个集群。在这个过程中,`Nginx`常被用作反向代理服务器,而`Tomcat`则...
【Apache + Tomcat + Memcached】集群环境搭建详解 在构建高性能、高可用性的Web服务时,Apache服务器、Tomcat应用服务器以及...这种架构适用于高并发、高访问量的Web应用,能够有效地提升系统容错能力和扩展性。
1. **核心功能**:Tomcat9支持Servlet 4.0、JSP 2.3和EL 3.0等最新标准,提供了HTTP/2协议的支持,这使得它在处理高并发请求时表现出色。此外,Tomcat9还包含了对WebSocket的全面支持,使得实时通信变得更加便捷。 ...
Java_session共享配置主要涉及到Web应用中的会话管理,特别是如何在多服务器环境下保持用户会话的一致性。这里提到的几个jar文件是实现这一目标的关键组件。下面将详细讲解每个文件的作用及其背后的原理。 首先,`...
APR连接器通过JNI接口与操作系统进行更紧密的交互,通常在高并发环境下表现更佳。 4. **更好的安全管理**:Tomcat 7引入了用户角色和权限管理的增强,支持基于角色的访问控制(RBAC)。可以在`conf/tomcat-users....
2. 负载均衡:使用负载均衡器分配请求到多个Tomcat实例,实现高并发处理。 九、故障排查 1. 查看日志:错误信息通常在`logs/catalina.out`中。 2. 使用JMX工具:远程诊断和管理Tomcat实例。 3. 调试模式:通过设置...
它支持NIO(非阻塞I/O)和 APR(Apache Portable Runtime)接口,这可以提高服务器在高并发情况下的性能。特别是APR,利用操作系统级别的特性,如sendfile和epoll,进一步提升了网络通信的效率。 安全性方面,...
在性能优化方面,Tomcat提供了多线程模型,通过调整线程池参数(如maxThreads、minSpareThreads等)可以优化并发处理能力。此外,还可以通过压缩响应、缓存静态资源、减少session使用等方式提高性能。 安全性是另一...
在Web开发中,Session是一种非常重要的机制,用于在服务器端维护用户的状态信息。当用户登录网站后,服务器会为该用户创建一个唯一的...实现时需注意数据序列化、数据库设计、并发控制以及生命周期管理等关键技术。
1. 在Tomcat的`conf`目录下的`context.xml`文件中,为测试应用开启session复制功能。 ``` <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false"/> ``` 2. ...