问题现象:
调用方通过平台调用数据服务,出现fail to respond 报错信息,频率大概每周出现2-5次,不规律。
根据堆栈信息分析,HttpClient源码中代码行。根据堆栈信息排查到:org/apache/http/impl/conn/DefaultHttpResponseParser.java
DefaultHttpResponseParser继承了AbstractMessageParser,读取解析HTTP响应的头部行时候,parseHead方法读取sessionBuffer,若该数据为空则抛出NoHttpResponseException。而HttpClient则继续用这个连接发送请求则会读取不到正常的response,因而抛出NoHttpResponseException。
数据服务对应的keepalive_timeout=0,每个请求后会立即关闭连接。0代表什么意思呢?
数据服务主要是安全和隐私方面,这方面要求高的会禁用持久连接确保每个请求后立即关闭连接,减少被利用的风险。客户端某一时刻请求量大的时候,会复用连接池里面的连接。在客户端HttpClient连接空闲时间(10s)检查内,HttpClient客户端从连接池中获取的连接已经失效。
目标服务器负载太高处理不过来因而断开了连接,目前是可以排查排除网关及上游服务压力过大原因。
数据服务每个请求后会立即关闭连接,某一时刻请求量大于连接池的最大连接个数,HttpClient客户端从连接池中的连接已经失效,请求导致出问题。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有