当客户端(jmeter)触发超过1000个并行HTTP请求时,会发生ETIMEDOUT

时间:2017-03-23 13:20:03

标签: python rest http networking eventlet

我有一个python应用程序,它使用eventlet Green线程(1000个绿色线程池)来建立HTTP连接。每当客户端发出超过1000个并行请求时,就会发生ETIMEDOUT。任何人都可以帮助我解决可能的原因吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下最可能的原因是:DNS服务器请求限制。您可以通过取消DNS解析(请求http://{ip-address}/path,忘记添加正确的Host:标头)轻松检查是否属于这种情况。如果你进行网页抓取,这些步骤不是可选的,你绝对必须:

  • 基于聚合(即平均)执行时间自动控制并发(无人动作)。这适用于所有级别。如果DNS响应较慢,请退回并发DNS请求。如果您的响应速度(主体大小/时间)较慢,请退出TCP并发。如果CPU过载,请退回整体请求并发性 - 请求的数量超出您的处理能力。
  • 重试临时故障,每次增加重试前等待时间,搜索backoff algorithm。如何判断错误是否是暂时的?主要是研究,试验和错误。
  • 运行本地DNS服务器,查找并配置许多上游

您可能会遇到的高并发性的下一个流行问题是操作系统对打开的连接和文件描述符数量的限制。搜索sysctl somaxconnulimit nofile以解决这些问题。