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


        如今,试验组的同事寻找新能源我看到一个奇怪的现象。一个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问题更加苛刻。。。

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    多项目共享配置文件
    C# 可选参数 命名参数
    委托初探
    未能解析引用的程序集……因为它对不在当前目标框架……
    web中的autocomplete
    web程序获取客户端MAC地址
    结合C#在MSSQL中定义和使用自定义类型
    winform中的AutoComplete自定义控件
    C#编写扩展存储过程
    eric windows下和linux的安装配置
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4622958.html
Copyright © 2020-2023  润新知