JSP的Request session的有效時間應(yīng)合理設(shè)置之前寫了個簡單的jsp做壓力測試,沒想到出現(xiàn)的一個問題是當(dāng)壓力比較大的情況,運行比較久的話會出現(xiàn)一個現(xiàn)象,就是jvm的內(nèi)存幾乎被耗盡,用jprofiler查看會發(fā)現(xiàn)是有一個ConcurrentHashMap對象的內(nèi)存一直在增長,而且沒有釋放的跡象,隨后進入Debug模式,跟蹤查找都有誰new了ConcurrentHashMap,因為測試場景中是個非常簡單的jsp頁面,發(fā)現(xiàn)只有jsp的Request session會創(chuàng)建這個ConcurrentHashMap,很久沒寫jsp了,猜測是request session的默認超時時間太長,所以導(dǎo)致高壓力下(200并發(fā),總共連續(xù)訪問50萬次,jvm內(nèi)存1G)會出現(xiàn)內(nèi)存一直沒有回收的問題,后來打印了一下request session的默認超時(AS是jboss 4.2.2),是半小時,如果這樣的話確實是會有造成上面內(nèi)存一直被占用的現(xiàn)象。
這個jsp是這樣的,非常簡單: <%@ page contentType="text/html;charset=GBK" %>
造成這個問題的具體原因需要結(jié)合session的機制來講了,講session機制的文章相當(dāng)多,感興趣的話可以參見以下兩篇文章:Just Test. http://www./2007/1123/650439.shtml http://bbs./viewthread.php?tid=1178466 這個問題怎么說呢,只能說session用的時候要非常注意吧,畢竟是消耗內(nèi)存資源的,而且通常session都不會去配置成即時invalidate,都是有一定的超時時間的,在這樣的情況下,如果在超時時間范圍內(nèi)出現(xiàn)高訪問量的話,是很有可能會造成問題的,因此超時時間的合理設(shè)置非常重要。 ps: 好久沒玩過jsp和session了,確實沒太注意這種狀況,對于熟悉jsp和session機制的人來說也許這是常識 了,^_^,見諒見諒。 如果頁面上不需要session的話,可以這么做: <%@ page session="false" %> |
|
|