tornado多并发下http client connection timed out 分析及解决
2017-05-31 15:58
99 查看
tornado的http client有个max_clients设置,用来设置使用该client的最大并发请求数量。
请求的timeout有两个设置参数,connect_timeout request_timeout 单位秒
前者设置连接目标主机超时时间,后者设置请求下载超时时间
实际使用中设置 connect_timeout=2 发现,有很多connection timed out ,而且目标都是正常可访问的
由 getting many HTTP 599 errors for valid urls 和
猜测 实际由于connection timeout 从 fetch调用就开始计时,而由于max_clients限制,导致多余请求等待而触发connection timed out 错误。
结果就是connect_timeout参数在并发下并没有达到预期的目的。预期是设置连接目标主机超时时间,结果改时间还包含了等待前面并发完成的时间。
该猜测需要在timeout 错误出现时打印当前并发量来验证。
解决方案:1、如果为了成功获取,去掉timeout,可以尝试增大max_clents。
2、如果为了connect_timeout 必定达到预期效果,需要借助单独的请求queue和semaphore来控制真正进入connect timeout计时的请求数量小于 max_clients。
请求的timeout有两个设置参数,connect_timeout request_timeout 单位秒
前者设置连接目标主机超时时间,后者设置请求下载超时时间
实际使用中设置 connect_timeout=2 发现,有很多connection timed out ,而且目标都是正常可访问的
由 getting many HTTP 599 errors for valid urls 和
Queueand
Semaphoreexample - a parallel web spider 启发
猜测 实际由于connection timeout 从 fetch调用就开始计时,而由于max_clients限制,导致多余请求等待而触发connection timed out 错误。
结果就是connect_timeout参数在并发下并没有达到预期的目的。预期是设置连接目标主机超时时间,结果改时间还包含了等待前面并发完成的时间。
该猜测需要在timeout 错误出现时打印当前并发量来验证。
解决方案:1、如果为了成功获取,去掉timeout,可以尝试增大max_clents。
2、如果为了connect_timeout 必定达到预期效果,需要借助单独的请求queue和semaphore来控制真正进入connect timeout计时的请求数量小于 max_clients。
相关文章推荐
- 聊聊高并发(十二)分析java.util.concurrent.atomic.AtomicStampedReference源码来看如何解决CAS的ABA问题
- mysql 并发下数据不一致的问题分析及解决
- 在大并发写时,HBase的HDFS DFSClient端报SocketTimeoutException的问题分析和解决
- mysql并发insert deadlock分析以及解决,无delete/update/for update
- Java并发-ConcurrentModificationException原因源码分析与解决办法
- tornado解决高并发的初步认识牵扯出的一些问题
- 谈论高并发(十二)分析java.util.concurrent.atomic.AtomicStampedReference看看如何解决源代码CAS的ABA问题
- 分析MySQL并发下的问题及解决方法
- PHP开发中解决并发问题的几种实现方法分析
- 在大并发写时,HBase的HDFS DFSClient端报SocketTimeoutException的问题分析和解决
- SQLite并发操作下的分析与处理,解决database is locked,以及多线程下执行事务等问题
- 一次诊断和解决CPU利用率高的问题分析
- 数据库性能优化分析案例---解决SQL语句过度消耗CPU问题
- ORACLE常见错误代码的分析与解决(二)
- Java 编程技术中汉字问题的分析及解决
- Windows变慢原因分析及解决方法
- ORACLE常见错误代码的分析与解决(二)
- 解决使用 DataSet 对象时出现的数据并发异常
- ORACLE常见错误代码的分析与解决(三)
- 分析:解决m程序转化成cpp程序的编译问题