我使用rails 3 + paperclip来托管我的文件管理应用程序。
但是,回形针似乎无法处理大文件(> = 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服务器,它不会给我任何错误,但上传的文件已损坏。
知道如何解决这个问题吗?
谢谢!
更新
我修改了一些tomcat连接器配置并改为输入此错误:
IOError (Disk quota exceeded): app/controllers/submissions_controller.rb:73:in `create'
但我100%确定我有足够的空间可以使用。
答案 0 :(得分:1)
某些平台可能破坏了构建的sendfile支持 系统 没有检测到,特别是如果二进制文件是在另一个盒子上构建的 并且移动到这样一台具有破坏的sendfile支持的机器。
在Linux上,使用sendfile会触发TCP校验和卸载错误 在使用IPv6时,在某些网卡上。
使用网络安装的目录(例如NFS或SMB),内核 可能无法通过自己的缓存提供网络文件。
将useSendfile="false"
添加到server.xml
<Connector ...
useSendfile="false"
/>
要检查的其他配置
体面的内存分配和超时
JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:MaxPermSize=128m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
Tomcat连接器选项
maxPostSize (104857600 == 100兆字节,默认= 2兆字节)
将由POST处理的POST的最大字节数 容器FORM URL参数解析。该功能可以被禁用 将此属性设置为小于或等于0的值。如果不是 指定,此属性设置为2097152(2兆字节)。另外两个 要检查的配置是超时限制和maxFileSizeLimit
disableUploadTimeout (确保其未设置为false)
此标志允许servlet容器使用 在servlet正在进行时,连接超时不同 执行,最终允许servlet更长的数量 时间来完成其执行,或在数据期间更长的超时 上传。如果未指定,则此属性设置为“true”。
maxHttpHeaderSize (尝试加倍)
请求和响应HTTP标头的最大大小,在 字节。如果未指定,则此属性设置为4096(4 KB)