4

Eclipseは、ローカルアプリケーションサーバーを終了せずにWebアプリケーションを複数回実行しようとしているときに、UNIXマシンでメモリ不足の例外を発生させています。jdk1.6があります。次に、vm引数を使用してヒープスペースを増やし、Eclipse.iniを変更してみました。しかし、役に立たない。

しばらくの間グーグルで検索し、webappclassLoaderの複数のデプロイメントに問題があることを知りました。この問題の解決策を見つけることができません。これを克服するための解決策を提供してください。

LogoutServletでの複数の展開と記述されたコードを回避するために、FileCleanerFileCleaningTracker )を使用することがわかりました。

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

しかし、それは機能していません。

前もって感謝します 。

4

1 に答える 1

0

FileCleanerについてはよくわかりませんが、javadocをざっと確認すると、exitWhenFinished()を呼び出すと、ファイルを削除するバックグラウンドスレッドが強制終了されるとのことです。私がこれを読んだのは、ファイルは削除されないということです。

私の推測では、あなたの問題は本当にホットスワップコードの標準的な問題です:PermGenスペースが不足しています。これは、削除されないクラス定義の部分があり、サーブレットを停止/開始すると、それらの部分がJVMに蓄積されるために発生します。

この問題に対する最も簡単な答えは、作業を実行できるように十分な大きさのPermGenスペースを作成することです。これをアプリケーションサーバーのVM引数に追加してみてください。

-XX:MaxPermSize=128M

これにより、メモリが不足する前に、より長く作業できるようになります。この数は、マシンのメモリ量に応じて増やすことができます。

于 2012-07-11T17:40:20.153 に答える