【问题标题】:What's the difference between uWSGI's socket-timeout/http-timeout/harakiri?uWSGI的socket-timeout/http-timeout/harakiri有什么区别?
【发布时间】:2018-07-14 15:44:38
【问题描述】:

我编写了一个简单的 WSGI 应用程序(使用 Flask),由 uWSGI(即除了 uWSGI 之外没有其他 HTTP 服务器)提供服务,它只支持单个 PUT 路由,客户端可以使用该路由上传文件(可能约为 400MB 大小),并对其进行处理在服务器上,然后发回。

在 uWSGI 日志中,一段时间后我注意到两种超时错误。发送响应时通常是超时:

Feb 02 20:46:30 myserv uwsgi[18948]: uwsgi_response_sendfile_do() TIMEOUT !!!
Feb 02 20:46:30 myserv uwsgi[18948]: OSError: write error
Feb 02 20:46:30 myserv uwsgi[18948]: [pid: 18954|app: 0|req: 1795/3935] aa.bb.cc.dd () {32 vars in 455 bytes} [Fri Feb  2 20:46:06 2018] PUT /sample.exe => generated 0 bytes in 24314 msecs via sendfile() (HTTP/1.1 200) 6 headers in 258 bytes (3353 switches on core 0)

但有时,接收 PUT 请求时也会超时:

Feb 03 20:18:32 signserv uwsgi[18948]: [pid: 18953|app: 0|req: 2975/5670] aa.bb.cc.dd () {32 vars in 455 bytes} [Sat Feb  3 20:18:02 2018] PUT /samplefile.exe => generated 0 bytes in 29499 msecs via sendfile() (HTTP/1.1 200) 6 headers in 258 bytes (2930 switches on core 0)
Feb 03 20:20:30 signserv uwsgi[18948]: [uwsgi-body-read] Timeout reading 16384 bytes. Content-Length: 354414781 consumed: 0 left: 354414781

一些调试表明,这通常发生在非常慢的客户端(即负载很高)上。

我想通过增加一些超时来缓解这种情况,但是 uWSGI 似乎支持过多的超时,我不清楚它们中的哪些与这里相关。我确定了三个超时,听起来我可能想增加它们,但我很难找到关于它们有何不同的文档:

  • socket-timeout
  • http-timeout
  • harakiri

谁能阐明这些超时的影响、它们的默认值是什么以及应该调整哪些(如果有)以避免上述问题?

【问题讨论】:

  • 不管怎样,将socket-timeouthttp-timeout 都设置为60 会使超时错误消失。我不知道它们中的任何一个是否足够,但它现在有效 - 所以我是一个快乐的露营者。不过,如果能得到一些信息丰富的答案仍然会很好,所以我将把这个问题留着。

标签: python flask uwsgi wsgi


【解决方案1】:

简单来说,harakiri 是 uWSGI 超时,http-timeoutsocket-timeout 是平衡器/代理服务器超时。

当这些参数不同时,日志中可能会出现混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2019-11-28
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多