我正在使用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()) {
...
最佳答案
您正在使用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
因此,请尝试使用最新的可用版本。