java - Servlet文件上传

标签 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()) {
        ...

最佳答案

您正在使用 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

所以请尝试使用最新的可用版本。

关于java - Servlet文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387226/

相关文章:

java - 如何从 jfree 图表中删除切片部分标记

java - 对JAVA接口(interface)感到困惑

java - Servlet 不工作,页面不进入 tomcat webapps 目录

java - Tomcat - 上下文路径匹配究竟是如何工作的?

java - 除非明确捕获,否则异常不会显示在控制台中

java - 如何在不重新启动服务器的情况下重新部署 EJB 项目

ipad - 防止 iPad 任务切换时 Web 应用程序重新启动

php - PHP中有没有可以检测IP类型的函数?

java - 如何在 Tomcat 启动时初始化 Web 应用程序常量(从文本文件)?

java - 对动态 URL 应用过滤器