zoukankan      html  css  js  c++  java
  • JSP页面导致tomcat内存溢出一例

       今天发现一个奇怪的问题,一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码——想用这个jsp页面配合tomcat完成一个性能验证。但是用jmeter压测了几分钟之后,分配了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.在web.xml里把session的过期时间设成0。

  • 相关阅读:
    springboot+mybatis实现逆向工程
    关于cookie,session和token
    fiddler手机抓包配置
    js json按key值排序
    关于CSS和CSS3的布局小知识(干货)
    移动端手机上传图片处理
    nginx|gzip_static 安装
    Vue npm run serve linux 持久运行
    Web前端开发标准规范总结
    liunx启动node服务(nodejs+express+mysql+pm2)
  • 原文地址:https://www.cnblogs.com/onmyway20xx/p/7526486.html
Copyright © 2011-2022 走看看