一尘不染

重新组合上载的文件时服务器超时

tomcat

我正在运行一个简单的服务器应用程序,以接收来自精细上传器Web客户端的上传。它基于优良的上载Java示例,并在Tomcat6中运行,而Apache位于其前面,并使用ProxyPass路由请求。我遇到一个偶然的问题,上传达到100%,但最终失败。在服务器日志和客户端日志中,我可以看到Apache在代理上超时,出现502错误。

亲自尝试并看到此问题后,我意识到该问题发生在非常大的文件中。Java服务器应用程序花费了30秒钟以上的时间才能将这些块重组为一个文件,因此Apache会终止连接并停止等待。我将Apache超时时间增加到300秒,这应该可以在很大程度上解决问题,但潜力仍然存在。

关于其他方法的任何想法,以便在应用程序在服务器上组装块时不会杀死Apache和Tomcat之间的连接?我目前正在使用2
MB的块,并在想也许我应该使用更大的块大小。也许用更少的块来组装服务器代码可以更快地完成。我可以测试一下,但是除非提速如此之快,否则似乎仍然存在问题的可能性,并且只会等待足够大的上传来触发它们。


阅读 275

收藏
2020-06-16

共1个答案

一尘不染

您似乎有两种选择:

  1. 在Apache中删除超时。
  2. 将组块组合工作委托给单独的线程,并尽快返回对请求的响应。

使用后一种方法,您将无法让Fine Uploader知道块组合操作是否失败,但是也许您可以在响应之前执行一些快速的完整性检查,例如确定是否可以访问所有块。

Fine Uploader在这里无法执行任何操作,问题出在服务器端。Fine Uploader发送请求后,其工作将完成,直到您的服务器响应为止。

如您所述,增加块大小或进行其他更改以加快块组合操作以减少超时的机会(如果不希望使用上面的#1或#2)是合理的。

2020-06-16