2012-07-11 39 views
4

Eclipse在我的UNIX計算機上發出內存不足異常,擁有jdk 1.6.嘗試多次運行我的web應用程序而不終止本地應用程序服務器。 然後通過vm參數增加我的堆空間,並嘗試更改Eclipse.ini。 但沒用。是FileCleaner以避免Web應用程序中的多個部署?

Google搜索了一段時間 並且知道它是webapp classLoader多個部署的問題。我無法找到解決這個問題的方法。請給出一個解決方案來解決這個問題。

我發現使用FileCleanerFileCleaningTracker)爲避免LogoutServlet多種部署和編寫的代碼。

@Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     req.getSession().invalidate(); 
     FileCleaner.getInstance().exitWhenFinished(); 
     resp.sendRedirect("/index"); 
    } 

但它不工作。

在此先感謝。

回答

0

我不太瞭解FileCleaner,但是對javadoc狀態的粗略回顧稱調用exitWhenFinished()會殺死後臺線程來刪除文件。我對此的看法是,這些文件不會被刪除。

我的猜測是你的問題實際上是一個熱插拔代碼的標準問題:在PermGen空間之外。發生這種情況是因爲有些類定義永遠不會被刪除,並且當您停止/啓動servlet時,這些部分會在JVM中累積。

對這個問題最簡單的答案是創建一個足夠大的PermGen空間讓你完成工作。嘗試將其添加到應用程序服務器的虛擬機參數中。

-XX:MaxPermSize=128M 

這應該允許您在耗盡內存之前工作更長時間。該數量可能會增加,具體取決於您的機器上的內存量。