文件上传Eclipse环境之间的速度差异和部署到tomcat webapps文件夹

时间:2013-10-08 07:44:41

标签: java tomcat file-upload struts2 system-properties

您好我在File Upload struts2使用了commons-fileuplod

编辑: 当我从eclipse with right click and run on server运行我的演示时,上传文件的时间非常短

**Run From ECLIPSE :**   
 File Size : 247 MB
    Time TAken By upload using Run On server From eclipse  :--> 2989 MS

另一方面,当我deploy same demo war file to Tomcat in webapps folder跑步时。因此,与上一个案例相比,上传文件需要更多时间。 (为什么这个时间差很大?)

**Run Using Deploy Demo In Tomcat :**
File Size : 247 MB
Time TAken By upload By deploed war file to tomcat web apps folder  :--> 14162 MS

我在java.io.tmpdir中更改了MonitoredMultiPartRequest.java

        System.setProperty("java.io.tmpdir", "D:\\ankit");
        System.out.println("java.io.tmpdir :--> " + System.getProperty("java.io.tmpdir"));

        UploadListener listener = new UploadListener(servletRequest);
        // Create a factory for disk-based file items
        FileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        try{
            long start = System.currentTimeMillis();
            List items = upload.parseRequest(servletRequest);
            long end = System.currentTimeMillis();
            System.out.println("Time TAken By upload 3.2.1 :--> " + (end - start));
            getsystemDetail();
      } catch (Exception e){
        errors.add(e.getMessage());
    }

我在这里提到我的日志:

从ECLIPSE运行:

==== System Property =========
java.io.tmpdir :--> D:\ankit
================================
Time TAken By upload File :--> 2989
==================================
##### Heap utilization statistics [MB] #####
Used Memory:46
Free Memory:85
Total Memory:132
Max Memory:675
File system root: C:\
Total space (mb): 79899
Free space (mb): 31833
Usable space (mb): 31833
File system root: D:\
Total space (mb): 158472
Free space (mb): 117366
Usable space (mb): 117366
This is ServletContext RealPath path ::--> D:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FILEUPLOAD_DEMO_OldLIB\
File Uploaded Succ. TO ::-> D:\ankit\eclipse.zip

在Tomcat中使用Deploy Demo运行:

==== System Property =========
java.io.tmpdir :--> D:\ankit
================================
Time TAken By upload File :--> 14162
==================================
##### Heap utilization statistics [MB] #####
Used Memory:100
Free Memory:31
Total Memory:132
Max Memory:1820
File system root: C:\
Total space (mb): 79899
Free space (mb): 31830
Usable space (mb): 31830
File system root: D:\
Total space (mb): 158472
Free space (mb): 117358
Usable space (mb): 117358
This is ServletContext RealPath path ::--> D:\tools\tomcat7-6\webapps\FILEUPLOAD_DEMO_OldLIB\
File Uploaded Succ. TO ::-> D:\ankit\eclipse.zip

1 个答案:

答案 0 :(得分:4)

假设您的250mb文件在C:\上,并且您从eclipse运行,它会将文件复制到您的临时目录中的同一驱动器。即使您的eclipse存在于D:\中,它也会使用您的Windows操作系统临时目录,如eclipse配置中所示。在Tomcat测试中,它使用Tomcats临时目录,如配置中所示。

因此,如果您的文件位于C:\,则如下所示:

从eclipse运行:

C:\myLargeFile.dat -> C:\Users\ANKITV~1.PAT\AppData\Local\Temp\myLargeFile.dat

在Tomcat中使用Deploy Demo运行

C:\myLargeFile.dat -> D:\tools\tomcat7-6\temp\myLargeFile.dat

我不知道您的硬件设置,但如果您的C:\是固定状态且D:\不是,则结果会有很大差异。即使使用高性能硬盘驱动器在硬盘驱动器之间进行传输也会造成性能损失,您可以通过在两个驱动器之间复制大文件来做到这一点,并且只需将文件复制到同一驱动器中的不同位置即可。留意它需要多长时间(确保你复制它不移动它)。

测试这是否是问题的一些好方法:

  1. 将tomcat测试的临时目录更改为C:\。查看此帖子,了解有关如何执行此操作的详细信息:How is the Tomcat temp directory location defined?
  2. 将您的tomcat insallation移至C:\并再次测试。非常自我解释,但如果您有系统变量或脚本指向它,可能会更多工作。
  3. 将您的250mb文件放入D:\并尝试将其上传到您的tomcat测试中,看看时间间隔是否会降低。

  4. 你能为我们测试一下,让我们知道你发现了什么吗?我很想听听结果! 以下是我所指的配置文件中的要点:

    从eclipse运行:

    ...
    java.io.tmpdir=C:\Users\ANKITV~1.PAT\AppData\Local\T...
    ...
    

    在Tomcat中使用Deploy Demo运行

    ...
    java.io.tmpdir=D:\tools\tomcat7-6\temp
    ...