我在試圖在我們的Tomcat Java Web應用程序中的內存泄漏的過程中,我想我已經找到了使再三要求我們的JSP中的一個時。但是,在將它拆分爲一個空的JSP後,將其放入運行在jdk1.6上的開箱即用的Tomcat 6.0.37實例中後,我仍然可以看到同樣的結果。Tomcat的JSP請求消耗所有的堆空間
我啓動Tomcat與256M的最大堆大小(-Xmx),和堆由下面我的測試類繞製成282000請求後運行的空間。
爲了便於比較,我還創建了一個HttpServlet的,做同樣的事情作爲JSP和修改了我的測試客戶端調用代替,這將全天運行而不會耗盡內存。
我已經開始嘗試分析堆弄清楚是怎麼回事,但沒有真正成氣候。 Soooo,這是怎麼回事?
測試JSP
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ page contentType="text/plain"%>
<% System.out.println("Page requested: " + new Date()); %>
This is a test response
Java測試客戶端
public static void main(String[] args) throws Exception {
int i=0;
while(true) {
java.net.URL url = new java.net.URL("http://localhost:8080/test.jsp");
InputStream is = url.openStream();
while(is.read() != -1) {
//nothing, just read the stream
}
is.close();
System.out.println("Requests made: " + i++);
}
}
啊啊啊,這是有道理的。我發現堆中的'StandardSession'對象與創建的請求大致相同。你是對的,這不是「真正的世界問題」,但理解這有助於我調整我的測試,希望找到實際問題。 – schmimd04
不客氣。分析器可能會更有助於查找實際問題。 – BalusC