? ? 如今,試驗(yàn)組的同事尋找新能源我看到一個(gè)奇怪的現(xiàn)象。一個(gè)tomcat應(yīng)用,內(nèi)只有一個(gè)簡單的jsp頁面,和這個(gè)jsp無論是什么頁java代碼(我想用這個(gè)jsp在她的網(wǎng)頁測(cè)試server一對(duì)tomcat的最大QPS)。可是用loadrunner壓測(cè)了幾分鐘之后。分配了1024M堆內(nèi)存的tomcat竟然包heap space outofmemory!這個(gè)頁面的代碼例如以下:
<%@ 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頁面撐死了會(huì)產(chǎn)生一個(gè)相應(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頁面就會(huì)生成一個(gè)對(duì)象。
? ? 百度了一下,發(fā)現(xiàn)每請(qǐng)求一次JSP頁面,會(huì)產(chǎn)生一個(gè)session對(duì)象。在tomcat的web.xml里面有這么個(gè)配置:
<session-config> <session-timeout>30</session-timeout> </session-config>
? ? 也就是說每請(qǐng)求一次jsp頁面。會(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。
? ? 如今她的loadrunner跑的非常穩(wěn)定。
工作之后就實(shí)用從未jsp該,搜索jsp問題更加苛刻。。。
版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
