我写了一个简单的WSGI应用程序(使用Flask),由uWSGI服务(即没有其他HTTP服务器,但是uWSGI)只支持单个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
任何人都可以了解这些超时的影响,默认值是什么以及应该调整哪些(如果有的话)以避免上述问题?
答案 0 :(得分:1)
简单来说, harakiri 是uWSGI超时,而 http-timeout 或 socket-timeout 是平衡器/代理服务器超时。
当这些参数不同时,日志中可能会有混淆。