2

我正在使用 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()) {
        ...
4

1 回答 1

0

您正在使用FileCleaningTracker,Apache commons FileUpload 的版本在该组件中有一个错误(参见:http: //blog.novoj.net/2012/09/19/commons-file-upload-contains-a-severe -内存泄漏/

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

所以尝试使用最后一个可用的版本。

于 2013-06-30T09:31:12.653 回答