一个JSP页面导致的tomcat内存溢出的解决方法
2014-10-30 00:00
746 查看
今天新能测试组的同事找我看一个奇怪的现象。一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码(想用这个jsp页面测试在她的服务器上的一个tomcat的最大QPS)。但是用loadrunner压测了几分钟之后,分配了1024M堆内存的tomcat居然包heap space outofmemory!这个页面的代码如下:
最初的分析是,一个JSP页面撑死了会产生一个对应的java文件,然后这个java文件编译成class文件,加载到内存里面去。也就是会有一个class对象会被加载到PermGen space里面去。跟heap space是没有任何关系的。但是最后报的是对空间溢出。于是猜测肯定是每请求一次jsp页面就会生成一个对象。
百度了一下,发现每请求一次JSP页面,会产生一个session对象。在tomcat的web.xml里面有这么个配置:
也就是说每请求一次jsp页面,会产生一个session对象,并且这个对象30分钟后才过期。我们计算了下当时的QPS是5000,也就是说每秒钟产生5000个session对象。每分钟产生300K个对象,session是个map对象,比较大,这样很快就会把内存撑爆。
解决办法如下:
1.在page指令里添加session=false。
2.把session的过期时间设成0。
现在她的loadrunner跑的很稳定。工作之后就再也没有用过jsp了,查jsp的问题还是比较费力
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>test</title> </head> <body> <p>hello world!</p> </body> </html>
最初的分析是,一个JSP页面撑死了会产生一个对应的java文件,然后这个java文件编译成class文件,加载到内存里面去。也就是会有一个class对象会被加载到PermGen space里面去。跟heap space是没有任何关系的。但是最后报的是对空间溢出。于是猜测肯定是每请求一次jsp页面就会生成一个对象。
百度了一下,发现每请求一次JSP页面,会产生一个session对象。在tomcat的web.xml里面有这么个配置:
<session-config> <session-timeout>30</session-timeout> </session-config>
也就是说每请求一次jsp页面,会产生一个session对象,并且这个对象30分钟后才过期。我们计算了下当时的QPS是5000,也就是说每秒钟产生5000个session对象。每分钟产生300K个对象,session是个map对象,比较大,这样很快就会把内存撑爆。
解决办法如下:
1.在page指令里添加session=false。
2.把session的过期时间设成0。
现在她的loadrunner跑的很稳定。工作之后就再也没有用过jsp了,查jsp的问题还是比较费力
相关文章推荐
- 一个JSP页面导致的tomcat内存溢出的解决方法
- 一个JSP页面导致的tomcat内存溢出
- 一个Jsp页面有两个window.onload的解决方法
- 使用Eclipse修改JSP页面需要重启tomcat的解决方法
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- 在Tomcat6.0中关于JSP/Servlet表单乱码的一个解决方法
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- 使用Eclipse修改JSP页面需要重启tomcat的解决方法
- Tomcat运行Servlet,JSP页面请求转发报错解决方法
- tomcat发布web项目JSP页面打开报空指针异常解决方法。
- 用一个最简单方法解决asp.net页面刷新导致数据的重复提交
- 一个页面中使用多个iframe导致在ie中假死问题的解决方法
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- Linux下Tomcat死活找不到JSP页面中import指定类的解决方法
- JSP页面导致tomcat内存溢出一例
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- Linux下Tomcat死活找不到JSP页面中import指定类的解决方法
- 一个JSP结果页面tomcat内存溢出
- 项目中引入了大量的第三方架包所导致的tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryErro