一个jsp页面导致的tomcat内存溢出的解决方法
来源: 阅读:1139 次 日期:2016-07-01 09:04:06
温馨提示: 小编为您整理了“一个jsp页面导致的tomcat内存溢出的解决方法”,方便广大网友查阅!

今天新能测试组的同事找我看一个奇怪的现象。一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码(想用这个jsp页面测试在她的服务器上的一个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 >

<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的问题还是比较费力

更多信息请查看网页制作
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map