【问题标题】:FOP Servlet memory leakFOP Servlet 内存泄漏
【发布时间】:2020-08-05 12:30:57
【问题描述】:

我创建了一个 web servlet,如下例所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try{
        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());

        //Setup a buffer to obtain the content length
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(PATH_TO_XSL));
        //Make sure the XSL transformation's result is piped through to FOP
        Result res = new SAXResult(fop.getDefaultHandler());

        //Setup input
        Source src = new StreamSource(new File("./resources/Employees.xml"));

        //Start the transformation and rendering process
        transformer.transform(src, res);

        //Prepare response
        response.setContentType("application/pdf");
        response.setContentLength(out.size());

        //Send content to Browser
        response.getOutputStream().write(out.toByteArray());
        response.getOutputStream().flush();
    }catch(Exception e){
        e.printStackTrace();
    }
}

但是,当我停止 tomcat 时,我得到了内存泄漏。我可以在日志中找到什么:

    SEVERE [http-nio-8080-exec-4] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [fop] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lan
g.ThreadLocal@294d3ff4]) and a value of type [org.apache.xerces.parsers.SAXParser] (value [org.apache.xerces.parsers.SAXParser@af83efc]) but failed to remove it when the web application was stopped. Threads are going to be renewed over t
ime to try and avoid a probable memory leak.

我尝试过的:

ServletContextcontextDestroyed方法中强制System.gc();

有什么办法可以解决这个问题吗?我停止tomcat后发生内存泄漏。

【问题讨论】:

  • 这个 servlet 或同一个 webapp 中的其他 servlet 是否使用 ThreadLocal 类?

标签: java tomcat servlets apache-fop


【解决方案1】:

使用来自 maven 的 jiderhamn jars 解决。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 2013-01-20
  • 2011-10-31
  • 2019-08-10
  • 2013-06-24
相关资源
最近更新 更多