`
xiejin2008
  • 浏览: 125492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SmartUpload缺陷:不能上传大文件,占内存耗CPU

阅读更多

最近我们的网站项目,有一段时间,服务器运行到一定的时候时,就会出现cpu占用率非常大,而且内存消耗也非常大.(当然服务器的配置还是比较高的).
    经过很多代码的优化和重构,还是没有解决这个问题.或许没有找到根本原因.
    其中
         1.我们有把单例类重新有换成普通的类.直接new 出一个实例.而不是调用一个静态方法去获得实例.(在网上搜索资料发现,单例模式用的不好的话,确实会有内存泄露的

情况.仔细分析了一下代码,如果很多用户同时并发访问的时候,确实会出现这种内存泄露和数据错误的情况).
          2.有把某些对象(包括String类型引用)在finally置为null的.尽管如此,还是发现内存有缓慢泄露的情况,cpu任然占用很高.
          3.后来我们用Jprofeil工具测试代码(该工具,可以测试具体调用某个方法时候,内存的使用情况和cpu的占用率).结果发现我们网站上传功能出现很大的问题.
          我们使用的上传组件:smartUpload.如果传大一点点的文件(我们网站限制为2M),或者网速不行并且用户多次点击上传按钮的时候,smartUpload组件上传会使得cpu占用率很 高而且消耗内存.

 

 

最终在网上搜索了commons-fileupload和smartUpload区别.及其相应的优点缺点.后来我们改用了commons-fileupload组件.
      并且把上传按钮,再点击之后就让它disabled,以免用户多次点击上传按钮..

服务器运行了一段时间,太神奇了.内存消耗率超级少.

 

真是太高兴啦....

分享到:
评论
10 楼 nbsven 2009-08-02  
我用的是UFOUpload组件(www.gm365.com上发布的),一直没出现过问题。
9 楼 mycybyb 2009-06-09  
使用commons-fileupload的时候,即使你设置最大上传大小为2M。这时候如果上传一个1G的文件,你会发现虽然上传不成功,但是在任务管理器里看网络活动,就会发现还是都上传了。
8 楼 xiejin2008 2009-06-08  
好的.试验一下
7 楼 lancer 2009-06-06  
但从性能考虑 推荐 cos
6 楼 kjj 2009-06-06  
cos 性能可能比commons 还好!!!
5 楼 kimmking 2009-06-06  
smartUpload比较简单,就3-4个类。
原理:
【把post上来的数据全部拿到。
分出request头。拿到分割字符串。
按这个把报文体切割成不同的form field区。
然后拿出来form-field数据,填到自己定义的request的参数map中。
文件数据提出来。】
整个过程在内存操作,文件大了,分割字符串位置计算很慢。再大,挂了。

-------------
apache的fileupload提供了使用临时文件的方式分片处理http报文。
最后再处理完毕后合并成一个大的临时文件。
所以可以处理大文件,没有内存问题。
4 楼 Bernard 2009-06-06  
分析输入流的同时将文件写入临时文件,最后操作临时文件即可。
文本字段还是放在内存里,这样就不需要占用太多的内存。
需要写一个简单的词法分析器和一个可以Pushback的输出流。
参考:http://tools.ietf.org/html/rfc1867
3 楼 willgo 2009-06-06  
恰好最近也遇到这个问题
我刚接触java
调试了一下之后发现,smartuplaod里面(或者是smartfile)有一个写入文件的方法,会先获得要写入文件的总字节,然后
new byte[字节大小]
一旦文件超过40M左右此处就会出现异常
这样来看,smartupload是不能支持大文件上传的

ps:我用的代码是框架里面的,经过其他人修改的。不过我想这个地方应该是smartupload原有的代码。
建议更换其他上传组件
2 楼 xiejin2008 2009-01-07  
是呀.我们用fileupload的时候,设置的缓存是4k,所以上传时候内存最多占用4K.还设置了临时文件存储目录.里面会生成tmp文件.好像有个web 的FTP的上传也蛮好的
1 楼 sdh5724 2009-01-07  
commons-fileupload 我记得会把上传的数据比较的大的时候, 写到文件里去。 所以, 降低了内存需求。 你可以DEBUG看看, 有个FileItem MemoryItem类似的对象。

相关推荐

    java文件上传smartUpload

    - 性能优化:对于大文件上传,可能需要考虑分块上传或异步处理以提高性能。 通过这个Demo,开发者可以了解如何在实际项目中使用SmartUpload实现文件上传功能。记得在实际部署时,根据项目需求调整配置,确保文件...

    SmartUpLoad上传文件视屏

    - **内存溢出**:如果上传文件过大,可能导致服务器内存溢出。可以通过设置上传大小限制和优化文件读写策略来避免。 - **文件重名**:多个用户同时上传同名文件时,可能产生冲突。可以添加时间戳或随机字符串作为...

    smartupload文件上传功能

    3. **文件大小限制**:可设置上传文件的最大大小,避免服务器资源被大文件占用。 4. **文件存储**:上传的文件可以存储在服务器的指定目录下,也可以存入数据库中。 5. **文件重命名**:自动或手动重命名上传的文件...

    SmartUpload文件上传小例子

    SmartUpload文件上传组件是Java Web开发中常用的一种工具,它为开发者提供了方便的文件上传功能。这个小例子展示了如何在JSP(Java Server Pages)环境中使用SmartUpload来处理用户上传的文件。SmartUpload通过简化...

    SmartUpload文件上传

    其核心优势在于能够处理大文件上传,同时提供了丰富的API,使得开发者可以方便地进行定制化开发。 1. **工作原理** - 客户端:SmartUpload在HTML表单中利用JavaScript实现文件选择和预览功能。当用户选择文件后,...

    smartupload 文件上传jar

    在Web应用中,文件上传功能是不可或缺的一部分,而SmartUpload则是一款专门用于处理文件上传的Java库。这个库以其简单易用、功能强大著称,深受开发者喜爱。本文将深入探讨SmartUpload的核心概念、工作原理以及如何...

    使用jspSmartUpload实现文件上传下载

    这个组件支持多文件上传,可以设定上传文件的大小限制,还能处理各种类型的文件格式。通过使用`jspSmartUpload`,开发者可以避免直接操作HTTP请求的复杂性,提高代码的可读性和可维护性。 **1. SmartUpload方法注解...

    smartupload文件上传下载

    3. 文件大小限制:开发者可以设置文件大小限制,防止大文件上传导致服务器资源耗尽。 4. 进度反馈:通过JavaScript,SmartUpload 可以在客户端显示上传进度,提升用户体验。 5. 错误处理:SmartUpload 自带错误...

    jsp上传控件-smartupload完美版:解决中文、内存所有问题

    jsp上传控件-smartupload完美版: 经过重新修改编译后,有4大特点: 1.解决中文上传乱码问题 2.解决中文下载乱码问题 3.解决无法自动生成文件夹问题 4.解决长时间运行内存泄漏问题 说明:...

    jspsmartupload组件源码.zip_ jspSmartUpload_jsp_jsp 上传文件_jspSmartUplo

    **JSpsmartupload组件**是一个基于Java的上传文件解决方案,主要应用于JSP(Java Server Pages)环境中。这个组件提供了一种简单且强大的方式来处理用户通过网页上传的文件。在标题和描述中提到的,该组件的核心是用...

    使用SmartUpload 实现文件上传

    SmartUpload支持多部分文件上传,可以设置最大文件大小、允许的文件类型,并且提供了保存文件到服务器的方法,以及读取文件内容的功能。 ### 前端表单设计 在前端,文件上传通常通过HTML表单实现。如示例代码所示...

    SmartUploadservlet文件上传下载

    `SmartUpload`组件是一个专门用于处理此类任务的工具,它极大地简化了开发者的工作,使得在JSP环境中实现文件上传和下载变得轻而易举。本文将深入探讨`SmartUpload`组件的使用方法、核心特性以及在实际项目中的应用...

    jspSmartUpload上传下载

    《深入理解JSP SmartUpload上传下载机制》 在Web开发中,文件上传和下载功能是不可或缺的一部分,尤其是在处理用户交互和数据交换时。JSP SmartUpload是一个常用的Java库,专门用于处理文件上传任务,它简化了在JSP...

    批量上传图片文件 smartupload

    10. **前端优化**:SmartUpload 还可以利用分块上传、断点续传等技术优化大文件的上传,尤其在网络不稳定或者文件体积较大的情况下,这些优化策略显得尤为重要。 总之,SmartUpload 是一个强大的批量图片上传工具,...

    JspSmartUpload实现多文件上传

    **JspSmartUpload详解** 在Web开发中,文件上传功能是一项常见的需求,尤其是在用户需要提交包含图片、文档等附件的表单时。...但了解JspSmartUpload的工作原理和使用方法,对于理解文件上传的整个过程仍有很大帮助。

    文件上传下载【SmartUpload】

    SmartUpload是一款功能强大的Java文件上传组件,它在Web开发中被广泛应用,特别是在处理大文件上传、多文件上传以及文件管理方面表现出色。本教程将深入探讨SmartUpload的使用方法和核心特性。 首先,SmartUpload的...

    SmartUpload上传小实例

    这个实例可能是为了帮助开发者理解如何在实际项目中使用SmartUpload,包括如何配置服务器以支持大文件上传,如何处理可能出现的异常,以及如何在上传成功后进行相应的业务处理。 在实践过程中,需要注意的点有: 1...

    SmartUpload文件上传下载方法包文件

    SmartUpload文件上传下载方法包文件SmartUpload文件上传下载方法包文件SmartUpload文件上传下载方法包文件SmartUpload文件上传下载方法包文件SmartUpload文件上传下载方法包文件

    上传文件使用的jar包jspsmartupload.jar

    2. **大小限制**:可以设定每个文件的最大大小以及整个上传请求的总大小,防止大文件或过多文件导致服务器资源耗尽。 3. **文件类型过滤**:开发者可以设置允许上传的文件类型,阻止潜在的恶意文件上传,提高系统...

Global site tag (gtag.js) - Google Analytics