精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-07
最后修改:2010-07-25
最近我们的网站项目,有一段时间,服务器运行到一定的时候时,就会出现cpu占用率非常大,而且内存消耗也非常大.(当然服务器的配置还是比较高的). 情况.仔细分析了一下代码,如果很多用户同时并发访问的时候,确实会出现这种内存泄露和数据错误的情况).
最终在网上搜索了commons-fileupload和smartUpload区别.及其相应的优点缺点.后来我们改用了commons-fileupload组件. 服务器运行了一段时间,太神奇了.内存消耗率超级少.
真是太高兴啦.... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-07
commons-fileupload 我记得会把上传的数据比较的大的时候, 写到文件里去。 所以, 降低了内存需求。 你可以DEBUG看看, 有个FileItem MemoryItem类似的对象。
|
|
返回顶楼 | |
发表时间:2009-01-07
是呀.我们用fileupload的时候,设置的缓存是4k,所以上传时候内存最多占用4K.还设置了临时文件存储目录.里面会生成tmp文件.好像有个web 的FTP的上传也蛮好的
|
|
返回顶楼 | |
发表时间:2009-06-06
恰好最近也遇到这个问题
我刚接触java 调试了一下之后发现,smartuplaod里面(或者是smartfile)有一个写入文件的方法,会先获得要写入文件的总字节,然后 new byte[字节大小] 一旦文件超过40M左右此处就会出现异常 这样来看,smartupload是不能支持大文件上传的 ps:我用的代码是框架里面的,经过其他人修改的。不过我想这个地方应该是smartupload原有的代码。 建议更换其他上传组件 |
|
返回顶楼 | |
发表时间:2009-06-06
分析输入流的同时将文件写入临时文件,最后操作临时文件即可。
文本字段还是放在内存里,这样就不需要占用太多的内存。 需要写一个简单的词法分析器和一个可以Pushback的输出流。 参考:http://tools.ietf.org/html/rfc1867 |
|
返回顶楼 | |
发表时间:2009-06-06
smartUpload比较简单,就3-4个类。
原理: 【把post上来的数据全部拿到。 分出request头。拿到分割字符串。 按这个把报文体切割成不同的form field区。 然后拿出来form-field数据,填到自己定义的request的参数map中。 文件数据提出来。】 整个过程在内存操作,文件大了,分割字符串位置计算很慢。再大,挂了。 ------------- apache的fileupload提供了使用临时文件的方式分片处理http报文。 最后再处理完毕后合并成一个大的临时文件。 所以可以处理大文件,没有内存问题。 |
|
返回顶楼 | |
发表时间:2009-06-06
cos 性能可能比commons 还好!!!
|
|
返回顶楼 | |
发表时间:2009-06-06
但从性能考虑 推荐 cos
|
|
返回顶楼 | |
发表时间:2009-06-08
好的.试验一下
|
|
返回顶楼 | |
发表时间:2009-06-09
使用commons-fileupload的时候,即使你设置最大上传大小为2M。这时候如果上传一个1G的文件,你会发现虽然上传不成功,但是在任务管理器里看网络活动,就会发现还是都上传了。
|
|
返回顶楼 | |