【问题标题】:Grails File Upload: Tomcat Memory DrainGrails 文件上传:Tomcat 内存耗尽
【发布时间】:2011-09-19 19:26:20
【问题描述】:

我们注意到在上传文件时会占用大量 RAM。我非常期待,但释放内存的速度似乎很慢。显然,当 RAM 过低时,这会导致整个系统变慢。

除了增加更多 RAM 之外,还有什么可以帮助提高文件上传的一般性能和 RAM 使用率或上传完成后对象被 GC 的速率? Tomcat6中的服务器设置? Grails 本身有什么东西?

【问题讨论】:

    标签: performance grails file-upload tomcat6


    【解决方案1】:

    如 Grails 手册中所述,您如何处理文件上传?如果您期望相当多的并发文件上传(相当大的大小)非常消耗内存,那么这对您来说可能还不够好。

    在我看来,您想让您的应用将上传的内容保存在磁盘上,而不是将其保存在内存中(在将文件内容传递给您的控制器之前)

    Grails 在后台使用 Commons Fileupload。在您的情况下,编写一个以比常规 grails 方式更复杂的方式进行处理的控制器可能更实用。也许streaming API 是您想要的,或者regular way(向下滚动到“资源清理”)但使用磁盘存储而不是内存。我认为您可以在控制器操作中使用该页面上的代码。 Commons Fileupload 已经在你的类路径中了

    【讨论】:

    • 是的,我正在以“Grails”的方式进行操作,然后将文件保存到磁盘。所以在我的 Grails 控制器中,如果我只使用你链接的 API,那么它会绕过 Grails 方式吗?我想我不知道的唯一部分是在我的控制器执行时 Grails 完成了多少。
    • 另外,调试请求时,文件似乎已经存储在磁盘上,而不是内存中。所以我只是不清楚我是如何通过直接使用 FileUpload API 绕过 Grails 的。那里需要一些澄清。此外,使用您提供的链接中提供的代码示例,我的 FileItems 列表返回为空。
    • 更多信息。我在搜索时遇到了这个问题:grails.1312388.n4.nabble.com/… 这表明 Grails 已经将文件保存到磁盘,而不是将其存储在内存中。似乎没有一个常规的旧 Servlet,我无法改变它在 Grails 控制器中的工作方式。这意味着我也无法实施清理。奇怪的是这些文件甚至没有那么大。最大 12MB。 Tomcat 在 4GB 机器上运行,并有 2GB 专用于它。仅 1 人上传几次后,Tomcat 就窒息了。
    • 添加到@HansWesterbeek 的答案,这里是你如何开始这样做 - stackoverflow.com/questions/46892481/…
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 2013-01-04
    • 1970-01-01
    • 2015-08-23
    • 2012-11-10
    • 2012-08-19
    • 2011-02-09
    • 2015-10-01
    相关资源
    最近更新 更多