今天新能測(cè)試組的同事找我看一個(gè)奇怪的現(xiàn)象。一個(gè)tomcat應(yīng)用,里面只有一個(gè)單純的jsp頁(yè)面,而且這個(gè)jsp頁(yè)面沒有任何java代碼(想用這個(gè)jsp頁(yè)面測(cè)試在她的服務(wù)器上的一個(gè)tomcat的最大QPS)。但是用loadrunner壓測(cè)了幾分鐘之后,分配了1024M堆內(nèi)存的tomcat居然包heap space outofmemory!這個(gè)頁(yè)面的代碼如下:
最初的分析是,一個(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是沒有任何關(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è)配置:
也就是說每請(qǐng)求一次jsp頁(yè)面,會(huì)產(chǎn)生一個(gè)session對(duì)象,并且這個(gè)對(duì)象30分鐘后才過期。我們計(jì)算了下當(dāng)時(shí)的QPS是5000,也就是說每秒鐘產(chǎn)生5000個(gè)session對(duì)象。每分鐘產(chǎn)生300K個(gè)對(duì)象,session是個(gè)map對(duì)象,比較大,這樣很快就會(huì)把內(nèi)存撐爆。
解決辦法如下:
1.在page指令里添加session=false。
2.把session的過期時(shí)間設(shè)成0。
現(xiàn)在她的loadrunner跑的很穩(wěn)定。工作之后就再也沒有用過jsp了,查jsp的問題還是比較費(fèi)力
標(biāo)簽:貴州 青島 云浮 宿州 西藏 紅河 丹東 江西
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一個(gè)JSP頁(yè)面導(dǎo)致的tomcat內(nèi)存溢出的解決方法》,本文關(guān)鍵詞 一個(gè),JSP,頁(yè)面,導(dǎo)致,的,tomcat,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。