一個(gè)JSP頁(yè)面導(dǎo)致的tomcat內(nèi)存溢出的解決方法
今天新能測(cè)試組的同事找我看一個(gè)奇怪的現(xiàn)象。一個(gè)tomcat應(yīng)用,里面只有一個(gè)單純的jsp頁(yè)面,而且這個(gè)jsp頁(yè)面沒(méi)有任何java代碼(想用這個(gè)jsp頁(yè)面測(cè)試在她的服務(wù)器上的一個(gè)tomcat的最大QPS)。但是用loadrunner壓測(cè)了幾分鐘之后,分配了1024M堆內(nèi)存的tomcat居然包heap space outofmemory!這個(gè)頁(yè)面的代碼如下:
<%@ 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>
最初的分析是,一個(gè)JSP頁(yè)面撐死了會(huì)產(chǎn)生一個(gè)對(duì)應(yīng)的java文件,然后這個(gè)java文件編譯成class文件,加載到內(nèi)存里面去。也就是會(huì)有一個(gè)class對(duì)象會(huì)被加載到PermGen space里面去。跟heap space是沒(méi)有任何關(guān)系的。但是最后報(bào)的是對(duì)空間溢出。于是猜測(cè)肯定是每請(qǐng)求一次jsp頁(yè)面就會(huì)生成一個(gè)對(duì)象。
百度了一下,發(fā)現(xiàn)每請(qǐng)求一次JSP頁(yè)面,會(huì)產(chǎn)生一個(gè)session對(duì)象。在tomcat的web.xml里面有這么個(gè)配置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
也就是說(shuō)每請(qǐng)求一次jsp頁(yè)面,會(huì)產(chǎn)生一個(gè)session對(duì)象,并且這個(gè)對(duì)象30分鐘后才過(guò)期。我們計(jì)算了下當(dāng)時(shí)的QPS是5000,也就是說(shuō)每秒鐘產(chǎn)生5000個(gè)session對(duì)象。每分鐘產(chǎn)生300K個(gè)對(duì)象,session是個(gè)map對(duì)象,比較大,這樣很快就會(huì)把內(nèi)存撐爆。
解決辦法如下:
1.在page指令里添加session=false。
2.把session的過(guò)期時(shí)間設(shè)成0。
現(xiàn)在她的loadrunner跑的很穩(wěn)定。工作之后就再也沒(méi)有用過(guò)jsp了,查jsp的問(wèn)題還是比較費(fèi)力
相關(guān)文章
jsp學(xué)習(xí)之scriptlet的使用方法詳解
這篇文章主要介紹了jsp學(xué)習(xí)之scriptlet的使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
jsp從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)填充下拉框?qū)崿F(xiàn)二級(jí)聯(lián)動(dòng)菜單的方法
這篇文章主要介紹了jsp從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)填充下拉框?qū)崿F(xiàn)二級(jí)聯(lián)動(dòng)菜單的方法,涉及jsp數(shù)據(jù)庫(kù)的操作及聯(lián)動(dòng)菜單的構(gòu)造技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
J2ME/J2EE實(shí)現(xiàn)用戶登錄交互 實(shí)現(xiàn)代碼
用手機(jī)客戶端進(jìn)行登錄服務(wù)器,然后返回消息進(jìn)行交互.2009-07-07
JSP頁(yè)面中文參數(shù)的傳遞(get和post方法分析)
JSP頁(yè)面中文參數(shù)傳遞在實(shí)際的編程中是十分有用的,get和post方法更是十分的常見(jiàn),那如何掌握好這些方法呢?本文將會(huì)向你實(shí)現(xiàn)這些方法的具體事宜2013-08-08
Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
本文是對(duì)前幾天的“JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式”這篇的升級(jí)。由于在做一些小項(xiàng)目的時(shí)候遇到的問(wèn)題,因此才決定寫這篇博客的。昨天已經(jīng)將博客發(fā)布了,但是后來(lái)經(jīng)過(guò)一些驗(yàn)證有點(diǎn)問(wèn)題,所以今天改了一下重新的發(fā)布了2013-05-05

