Servlet文件上传

时间:2013-06-30 04:41:02

标签: java web-applications servlets heap-memory apache-commons-fileupload

我正在使用servlet进行多文件上传(使用Apache Commons FileUpload )。我的部分代码发布在下面。我的问题是,如果我一次又一次上传文件,应用服务器的内存消耗会大幅增加。 Apache Tomcat服务器似乎挂在内存上,永远不会返回它。堆空间耗尽内存。有时它会耗尽内存异常并抛出java heap space error

我关闭了所有输入流,我认为问题出在ServletFileUpload,任何人都可以帮我解决问题。

ServletContext context=this.getServletConfig().getServletContext();
DiskFileItemFactory factory = new DiskFileItemFactory();
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(context);
factory.setFileCleaningTracker(fileCleaningTracker);

if (isMultiPart) {
    upload = new ServletFileUpload(factory);

    try {
        itr = upload.getItemIterator(request);
        while (itr.hasNext()) {

        item = itr.next();
        if (item.isFormField()) {
        ...

1 个答案:

答案 0 :(得分:0)

您正在使用 FileCleaningTracker ,有一些版本的Apache commons FileUpload,其中包含该组件中的错误(请参阅:http://blog.novoj.net/2012/09/19/commons-file-upload-contains-a-severe-memory-leak/

它似乎已经修复:https://issues.apache.org/jira/browse/FILEUPLOAD-189

请尝试使用上一个可用版本。