当前位置: 首页 > 知识库问答 >
问题:

Tornado AsyncHTTPClient请求在中等负载下超时

程枫
2023-03-14

我正在运行一个简单的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

(数据部分传输时超时)

我已经能够在两个不同的环境中重现这一点,一个是AmazonEC2mi实例,另一个是MacBookPro(i7)。在EC2实例中,只有2个并发客户端发出请求时才会出现超时,Macbook会一直保持到8个并发客户端,然后它也开始显示超时。

我尝试过一些事情,比如更新Tornado版本(2.2、2.3.1、2.4.1和3.1.1,如果我记得清楚的话),将底层AsyncHTTPClient实现从默认的简单实现更改为基于pycurl的实现,并增加异步客户端的数量(到200),但错误仍然在发生。

我不确定我可能做错了什么,因为这看起来根本不像Tornado所promise的可扩展性。。。

有什么提示吗?

更新

为了记录在案,我们在异步回调中使用了memache,但是库本身不是异步的。我把它换成了:https://github.com/dpnova/tornado-memcache/

我认为这是最大的问题,尽管我们仍不时收到599。

共有1个答案

公羊宇定
2023-03-14

听起来您的代码可能在某个地方阻塞了事件循环(整数秒-您是否调用了time.sleep()?)。尝试使用IOLoop.set_blocking_log_threshold查找事件循环被阻止的位置。

 类似资料:
  • 我在GKE上有一个LoadBalancer类型的服务,它指向运行nginx的GKE部署。我的nginx将所有超时设置为10分钟,但在收到响应之前必须等待处理的HTTP/HTTPS请求在30秒后因500个错误而被切断。我的设置: 显然,在LoadBalancer的某个地方有30秒的默认设置。 在浏览了大量文档之后,我在Google上只找到了一个步骤,其中概述了如何在GKE使用的类型为LoadBala

  • 我希望设置我的Spring Boot server超时,比如说15秒。明确一点:我希望如果我的服务器在15秒内没有响应,它将返回一个错误响应(类似于Heroku中发生的情况,只有30秒)。我怎么能那么做? 我的问题实际上源于这样一个事实,即该服务是一个网关,它调用另一个服务,有时需要很长时间来响应,而我无法控制该服务的超时。因为我使用的是SDK文件来调用服务器,所以我无法控制传出的调用。有没有一种

  • 问题内容: 我有一个向我的Java Servlet发送POST请求的javascript库,但是在该方法中,我似乎无法获取请求有效内容。在chrome Developer Tools中,所有内容都位于标头标签的“请求有效负载”部分中,并且内容在那里,而且我知道doPost方法正在接收POST,但它只是空白。 对于 对象,我可以通过什么方式在请求有效负载中获取数据? 这样做 两者最终都没有数据 问题

  • 我有一个使用Jersey编写的RESTful web服务,看起来如下所示: 问题:是否有方法接受空请求负载,并在服务器端处理它? 注意:我使用的是Jersey提供的POJO支持。

  • 这是我的Node Express代码, 但我将请求正文作为 {} 但在我的网络选项卡在Chrome我可以看到请求有效负载。请注意选项在此POST调用之前被激发。 请求标头 POST/abchttp/1.1 host:localhost:8112连接: 保持活动内容-长度:11 pragma:no-cache cache-control:no-cache 来源:http://localhost:42