2013-03-22 60 views
0

我使用rails 3 +回形针来托管我的文件管理应用程序。使用回形针上传大文件时出现JVM错误

然而,回形针似乎有麻烦交给大文件在开发环境(> = 200 MB)

它给了我:

JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait. 
JVMDUMP032I JVM requested Snap dump using '/home/ubuntu/upload/Snap.20130322.123321.12125.0001.trc' in response to an event 
JVMDUMP010I Snap dump written to /home/ubuntu/upload/Snap.20130322.123321.12125.0001.trc 
JVMDUMP032I JVM requested Heap dump using '/home/ubuntu/upload/heapdump.20130322.123321.12125.0002.phd' in response to an event 
JVMDUMP010I Heap dump written to /home/ubuntu/uploadheapdump.20130322.123321.12125.0002.phd 
JVMDUMP032I JVM requested Java dump using '/home/ubuntu/upload/javacore.20130322.123321.12125.0003.txt' in response to an event 
JVMDUMP010I Java dump written to /home/ubuntu/upload/javacore.20130322.123321.12125.0003.txt 
JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError". 
[2013-03-22 12:33:42] ERROR 
在生产环境中

,我部署该应用程序为WAR文件并上传到tomcat服务器,它不会给我任何错误,但上传的文件已损坏。

任何想法如何解决这个问题?

谢谢!

UPDATE

我修改了一些Tomcat连接配置和得到这个错误,而不是:

IOError (Disk quota exceeded): app/controllers/submissions_controller.rb:73:in `create' 

但我100%肯定,我有足够的空间来使用较多。

+0

如何在代码中下载/上传文件? – 2013-03-22 21:52:02

+0

'<%= upload.file_field:package,:accept =>“application/x-zip-compressed”%>' – 2013-03-25 19:13:50

+0

向JVM分配了多少内存? – 2013-03-25 20:42:27

回答

1
  • 一些平台可能打破的sendfile支持,构建 系统 没有检测,特别是如果二进制文件是建立在另一个盒子 和移动这样的机器坏了sendfile支持。

  • 在Linux上,当使用IPv6时,使用sendfile会触发某些网卡上的TCP-checksum卸载错误 。

  • 对于网络挂载的目录(例如NFS或SMB),内核 可能无法通过其自己的高速缓存提供网络文件。

添加useSendfile="false"到Tomcat连接器在server.xml

<Connector ... 
     useSendfile="false" 
/> 

其它配置来检查

  1. 体面存储器分配和超时

    JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:MaxPermSize=128m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000" 
    
  2. Tomcat连接选项

maxPostSize(104857600 == 100兆字节,默认= 2兆字节)

在将由 容器可处理的POST的字节的最大大小FORM网址参数解析。该功能可通过 将此属性设置为小于或等于0的值来禁用。如果不指定 ,则此属性设置为2097152(2兆字节)。另外两个 配置,以检查是不是超时限制和maxFileSizeLimit

disableUploadTimeout(确保其未设置为false)

此标志允许servlet容器使用 不同,较长的连接而超时servlet正在执行 ,这最终允许servlet在更长的时间内完成其执行,或者在数据上传期间更长的超时时间 。如果未指定,则此属性设置为“true”。

maxHttpHeaderSize(尝试加倍)

请求和响应的HTTP报头的最大大小,以字节为单位 指定。如果未指定,则将此属性设置为4096(4 KB)

+0

我试着添加'useSendfile =“假“'和'maxPostSize =”0“'(无限),但它不起作用,谢谢你的答案! – 2013-03-25 18:50:04