我正在运行一个简单的Web应用程序,它为每个请求使用一些Web服务,我发现我们的服务器有时会超时(合成599错误)的请求,即使其他服务是响应的在任何时候(我都证实了这一点)。
这些是我得到的错误消息:
HTTP 599: Connection timed out after 7005 milliseconds
(连接时超时)
HTTP 599: Operation timed out after 5049 milliseconds with 0 out of -1 bytes received
(在接收数据之前超时)
HTTP 599: Operation timed out after 10005 milliseconds with 11197 out of 13047 bytes received
(部分转移数据超时)
我已经能够在两个不同的环境中重现这一点,在Amazon EC2 mini实例和我的Macbook Pro(i7)中。在EC2实例中,超时开始发生,只有2个并发客户端发出请求,Macbook支持8个并发客户端,然后它也开始显示超时。
我已经尝试了一些更新Tornado版本(如果我记得很清楚的话,2.2,2.3.1,2.4.1和3.1.1),将基础AsyncHTTPClient实现从默认的简单实现更改为基于pycurl的版本增加异步客户端的数量(到200),但错误仍在发生。
我不确定我可能做错了什么,因为这看起来不像Tornado应该提供的承诺的可扩展性......
任何提示?
更新
仅仅是为了记录,我们在异步回调中使用memcache
,但是库本身并不是异步的。我将其替换为:https://github.com/dpnova/tornado-memcache/
这是我认为最大的问题,虽然我们仍然不时得到599。
答案 0 :(得分:1)
听起来你的代码可能会在某处阻塞事件循环(整数秒 - 你有没有调用time.sleep()?)。尝试使用IOLoop.set_blocking_log_threshold查找阻止事件循环的位置。