一个JSP页面导致的tomcat内存溢出的解决方法
JSP页面与Tomcat内存溢出:介绍与解决方案
近日,新能测试组的同事遇到了一桩怪事。他们在一个Tomcat应用中部署了一个简单的JSP页面,该页面并未包含任何Java代码。当他们使用LoadRunner进行压力测试时,仅仅几分钟内,分配给Tomcat的1024M堆内存竟然出现了内存溢出!这个页面的代码看起来相当基础,究竟是怎么回事呢?
这个JSP页面的代码非常简单,仅仅是一个基础的HTML页面,没有涉及到复杂的Java逻辑。每次请求这个JSP页面时,都会产生一个session对象。在Tomcat的web.xml配置文件中,有一个session-timeout的设置,默认是30分钟。
在高压的负载测试环境下,每秒钟都有大量的请求访问这个JSP页面,也就意味着每秒钟都会生成大量的session对象。这些session对象存储在内存中,由于每个session都是一个较大的map对象,很快就会导致内存溢出。
计算结果显示,当时的QPS(每秒查询率)高达5000,也就是说每分钟会生成约300K个session对象。这就好比一个不断膨胀的气球,最终会超过内存的限制,导致内存溢出。
那么,如何解决这一问题呢?经过研究,我们找到了两个解决方案:
1. 在JSP页面的指令中添加session=false。这样,每次请求页面时就不会创建新的session对象。
2. 将session的过期时间设置为0。这样,创建的session对象会在使用后立即失效,不会长时间占用内存。
这两个方法都能有效解决因JSP页面导致的Tomcat内存溢出问题。实际上,在我们应用这两个解决方案后,LoadRunner的负载测试运行得非常稳定。
这次经历也让我们深刻认识到JSP的一些潜在问题。尽管JSP页面开发简单,但在处理大量并发请求时,如果不注意细节,可能会引发严重的问题。对于需要处理大量并发请求的应用,可能需要考虑使用其他技术栈,以避免类似的问题。
这次经历让我们学到了很多关于JSP和Tomcat的知识,也让我们更加明白在处理Web应用时需要注意的细节。希望能够帮助到遇到类似问题的朋友们。
编程语言
- 一个JSP页面导致的tomcat内存溢出的解决方法
- MvcPager分页控件使用注意事项
- JS加载iFrame出现空白问题的解决办法
- 全面了解flex的用途
- Angular动态绑定样式及改变UI框架样式的方法小结
- php获取flash尺寸详细数据的方法
- IE6中ajax aborted错误请求中断解决方法
- PHP扩展框架之Yaf框架的安装与使用
- 浅析JS中常用类型转换及运算符表达式
- Angularjs中controller的三种写法分享
- MSSQL转MYSQL,gb2312转utf-8无乱码解决方法
- jQuery实现的鼠标响应缓冲动画效果示例
- mysql聚簇索引的页分裂原理实例分析
- 正则 js分转元带千分符号详解
- 创建一个ASP.NET MVC5项目的实现方法(图文)
- AngularJS ng-controller 指令简单实例