一個JSP頁面導致的tomcat內存溢出的解決方法_JSP教程
推薦:jsp+ajax發送GET請求的方法本文實例講述了ajax發送GET請求,然后通過jsp頁面來接收處理的實現方法。分享給大家供大家參考。具體實現方法如下: Ajax發送GET請求 這里用一個實例演示Ajax發送get請求,實例具體要求為一個注冊頁面,當用戶填寫完用戶名稱時,該輸入框失去焦點后會通過Ajax向后臺發
今天新能測試組的同事找我看一個奇怪的現象。一個tomcat應用,里面只有一個單純的jsp頁面,而且這個jsp頁面沒有任何java代碼(想用這個jsp頁面測試在她的服務器上的一個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的問題還是比較費力
分享:java使用smartupload組件實現文件上傳的方法這篇文章主要介紹了java使用smartupload組件實現文件上傳的方法,對比分析了使用組件與不使用組件實現文件上傳的區別,具有一定參考借鑒價值,需要的朋友可以參考下 本文實例講述了java使用smartupload組件實現文件上傳的方法。分享給大家供大家參考。具體分析如下: 文件
- 相關鏈接:
- 教程說明:
JSP教程-一個JSP頁面導致的tomcat內存溢出的解決方法
。