码迷,mamicode.com
首页 > Web开发 > 详细

一个JSP结果页面tomcat内存溢出

时间:2015-07-05 21:15:00      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

    如今,试验组的同事寻找新能源我看到一个奇怪的现象。一个tomcat应用,内只有一个简单的jsp页面,和这个jsp无论是什么页java代码(我想用这个jsp在她的网页测试server一对tomcat的最大QPS)。可是用loadrunner压測了几分钟之后。分配了1024M堆内存的tomcat竟然包heap space outofmemory!这个页面的代码例如以下:

<%@ 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内存溢出

标签:

原文地址:http://www.cnblogs.com/gcczhongduan/p/4622958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!