4

Eclipse 在我的 UNIX 机器上出现内存不足异常,具有 jdk 1.6。同时尝试多次运行我的 Web 应用程序而不终止我的本地应用程序服务器。然后通过 vm 参数增加我的堆空间,并尝试更改 Eclipse.ini。但是没有用。

google了一段时间,才知道这是webapp classLoader多次部署的问题。我无法找到解决这个问题的方法。请给出一个解决方案来克服这个问题。

我发现使用FileCleaner ( FileCleaningTracker ) 来避免在 LogoutServlet 中进行多次部署和编写代码。

@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 空间不足。发生这种情况是因为类定义的某些部分永远不会被删除,并且当您停止/启动 servlet 时,这些部分会在 JVM 中累积。

这个问题最简单的答案是创建一个足够大的 PermGen 空间来让你完成工作。尝试将此添加到应用程序服务器的 VM 参数中。

-XX:MaxPermSize=128M

这应该允许您在内存不足之前工作更长时间。这个数字可以根据您机器上的内存量增加。

于 2012-07-11T17:40:20.153 回答