? ? 如今,試驗組的同事尋找新能源我看到一個奇怪的現象。一個tomcat應用,內只有一個簡單的jsp頁面,和這個jsp無論是什么頁java代碼(我想用這個jsp在她的網頁測試server一對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" "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.把session的過期時間設成0。
? ? 如今她的loadrunner跑的非常穩定。
工作之后就實用從未jsp該,搜索jsp問題更加苛刻。。。
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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