大文件上传的ColdFusion设置

我正在尝试设置一个coldfusion服务器来接受大文件的上传,我正在遇到一些限制.这是我到目前为止所观察到的:

ColdFusion Administrator中有两个设置限制上传大小:“发布数据的最大大小”和“请求节流内存”.如果上载的大小(包括HTTP开销)大于这些设置中的任何一个,则拒绝上载.我无法弄清楚为什么我们需要其中的2个;根据我的判断,无论哪一个设置得更高都没有任何影响.较低的一个获胜.

当有人试图上传一个太大的文件时,他们没有得到一个很好的错误消息.在发送大约1个TCP窗口的数据后,上传只会永久挂起.它以一种非常糟糕的方式挂起.即使客户端放弃并断开连接,相关的apache线程仍然被绑定(我可以使用mod_status看到这一点).卡住的线程一直在不断积累,直到没有剩下的线程来接收新的请求,并且服务器必须重新启动.

“请求节流”是我真正不理解的事情.有关它的所有文档都将其视为内存区域的大小.如果那就是它,那么我看不出它与文件大小有什么关系.它暗示了一些我不想相信的东西:ColdFusion将整个上传的文件写入内存,然后再将其写入磁盘.没有理智的人会这样做,当上传循环(读取中等大小的块,将其写入磁盘,重复直到完成)是如此简单. (我知道HTTP multipart / form-data帖子的结构让它变得有点困难但是……肯定像Adobe这样的大公司有一个Web开发产品可以做到这一点……不是吗?)

如果整个文件啜饮实际上是在发生什么,他们如何期望我们选择可行的大小限制?允许一个千兆字节和几个同时用户可以在没有尝试的情况下运行服务器内存不足.我们要做什么,不允许gigabyte上传?人们有视频发布,没有时间进行编辑!

附加信息

这是一些版本号.

网络服务器:

Server: Apache/2.2.24 (Win64) mod_jk/1.2.32

ColdFusion的:

Server Product           ColdFusion
Version                  ColdFusion 10,285437
Tomcat Version           7.0.23.0
Edition                  Enterprise
Operating System         Windows Server 2008 R2
OS Version               6.1
Update Level             /E:/ColdFusion10/cfusion/lib/updates/chf10000011.jar
Adobe Driver Version     4.1 (Build 0001)

附加信息#2

我不知道为什么你想知道我在限制字段中放入了什么值,但它们都被设置为200 MB一段时间.我将“发布数据的最大大小”增加到2000 MB,但没有效果.我已经发现,如果我将“Request Throttle Memory”增加到2000 MB,它将允许更大的上传.我在这里寻找的不是一个快速的“东西更大的数字!”回答,但详细说明了这些设置的实际含义以及它们对服务器内存使用的影响.

为什么服务器线程永远停止而不是在超出限制时返回错误消息可能是单独的问题.我认为这将是一个众所周知的问题.也许我应该先询问是否有其他人可以复制它.我从未见过从ColdFusion返回给客户端的“文件太大”错误消息.应该有吗?

附加信息#3
一些实验让我得到了部分答案.我遗漏的第一件事是“请求节流存储器”(RTM)如果设置高于“发布数据的最大大小”(MSOPD),它会做一些有用的事情.在我的第一轮测试中,我不知道他们之间的关系,我反过来说.根据我的新理解,我可以看到RTM / MSOPD的比率是当它们都接近最大大小时将允许的同时上传的数量.

假设“Request Throttle Memory”实际上是一个内存缓冲区,而不是一个临时文件,这意味着我最担心的是正确的.每个文件在整个上传期间都完全保存在内存中.没有人说过让我相信的任何事情(虽然我也没有看到有人跳起来说“是的,他们做了这个愚蠢的事情”)

同样有了这种新的理解,停滞的上传也有一定道理.服务器没有可用于接受上载的内存,因此它不会从套接字读取. TCP缓冲区填满,窗口大小变为0,客户端等待它再次打开,这应该在服务器开始读取请求时立即发生.但就我而言,出于某种原因,这种情况从未发生过.服务器完全忘记了请求,所以它只是徘徊不前.

发布“最大发布数据大小”的情况仍然有点神秘.达到硬限制的请求不应排队,只是被拒绝.我确实收到server.log中的拒绝消息(“帖子大小超过最大限制200 MB.”).但在这种情况下,服务器似乎忘记了请求而没有向客户端发送错误.

我还将尝试解释调整的设置: –

> POST请求参数的最大数量 – 这是指通过特定请求发送的最大属性/参数数.特别是在表单上发布数据时使用.
>发布数据的最大大小 – 这是可以在服务器上发布的最大数据.这是POST请求期间特定形式的所有数据的总和.
>请求限制阈值 – 如果需要,ColdFusion可以限制(强制减慢)传入请求.但是,无论节流状态如何,都可以允许非常小的请求(具有较小有效负载的请求).要允许处理小请求,请指定允许的最大大小(默认值最大为4 MB).
>请求节流内存 – 要限制请求,请指定为节流分配的最大内存量.如果没有足够的总内存可用,ColdFusion会将请求排队,直到有足够的内存空闲(默认值为200 MB).它不会为Req1保留内存,因为它低于阈值.

考虑有三个同时请求Req1(3 MB),Req2(6 MB)和Req3(9 MB).使用默认设置,Request Throttle Threshold设置为4MB,ColdFusion将在Throttle Memory中保留(6 9 = 15MB).同样,它将继续为所有同时请求添加请求限制内存,并且限制是我们为请求限制内存设置的限制(默认为200 MB)

希望这可以帮助.

翻译自:https://serverfault.com/questions/582225/coldfusion-settings-for-large-file-uploads

转载注明原文:大文件上传的ColdFusion设置