【发布时间】:2014-06-23 12:43:53
【问题描述】:
我正在运行一个简单的服务器应用程序来接收来自精细上传 Web 客户端的上传内容。它基于 Fine-uploader Java 示例并在 Tomcat6 中运行,Apache 位于其前面并使用 ProxyPass 来路由请求。我偶尔会遇到上传达到 100% 但最终失败的问题。在服务器日志以及客户端上,我可以看到 Apache 在代理上超时并出现 502 错误。
在亲自尝试并看到这个之后,我意识到问题出现在非常大的文件中。 Java 服务器应用程序需要超过 30 秒的时间将这些块重新组合成一个文件,因此 Apache 会终止连接并停止等待。我已将 Apache Timeout 增加到 300 秒,这应该可以在很大程度上纠正问题,但潜力仍然存在。
关于处理此问题的其他方法的任何想法,以便在应用程序在服务器上组装块时不会终止 Apache 和 Tomcat 之间的连接?我目前正在使用 2 MB 的块,并且在想也许我应该使用更大的块大小。也许用更少的块来组装服务器代码可以做得更快。我可以对此进行测试,但除非加速非常显着,否则问题的可能性似乎仍然存在,只是等待足够大的上传来触发它们。
【问题讨论】:
-
我不这么认为。我明白为什么会发生超时,我正在向 Fineuploader 询问避免它的策略。假设服务器确实需要 10 分钟来从它发送的所有块中组装一个文件,如果没有将超时配置为 > 10 分钟,那么客户端和服务器连接如何更改?
-
使用 Fine Uploader 所能做的就是改变区块大小。问题显然出在服务器上。 @Ray 下面没有提到的另一个选项是使用 Fine Uploader S3。 S3 是一种可扩展、可用且低延迟的数据存储,根据我的经验,在组合甚至多 GB 文件的块时它超时的可能性非常低。
标签: apache tomcat fine-uploader