okhttp异步请求连接阻塞问题排查

表现:

使用okhttp请求外部大模型接口时,当并发在2-5左右,出现请求被阻塞在建立http连接之前,阻塞时间超长(>20s,从日志看有160s存在)。但是httpconfig的connTimeout时间配置为100s,可以证明http请求被阻塞在建立连接之前,160s并非都是建立连接时间

由于是流式接口,使用okhttp-sse框架进行http长连接建立。

域名表现:

且对不同域名http请求进行先后压测,A先压测,耗时飙升到20s+时,进行B压测,耗时从1s开始累加直20s+。所以判断连接前的阻塞并非针对全局的http请求,而是与相同域名下的请求有关。所以将问题定位到okhttp对同一域名有并发请求限制,比如等待连接或某处存在等待队列。

问题定位:

我们本次使用的是okhttp的sse功能,属于http异步请求。

在OKhttp中,针对异步请求,在Dispatcher分发器里面有一个配置,异步请求同一域名同时存在的最大请求数量(setMaxRequestsPerHost=5),这就表明对同一域名的请求同一时刻仅允许有5个连接,但是大模型的接口耗时基本都在20s上下,无形中把这个问题放大了。

对该值调大之后,再次压测,解决。

相关推荐
smallluan21 小时前
入门AJAX——XMLHttpRequest(Post)
前端·ajax·okhttp
志存高远663 天前
(面试)OkHttp实现原理
okhttp
隐-梵4 天前
Android studio进阶开发(七)---做一个完整的登录系统(前后端连接)
android·数据库·ide·spring·okhttp·android studio
隐-梵10 天前
Android studio进阶开发(六)--如何用真机通过okhttp连接服务器
服务器·数据库·okhttp·android studio
每次的天空12 天前
Android-OkHttp与Retrofit学习总结
android·okhttp·retrofit
tmacfrank12 天前
Android 网络全栈攻略(四)—— 从 OkHttp 拦截器来看 HTTP 协议一
android·网络·okhttp
tmacfrank13 天前
Android 网络全栈攻略(五)—— 从 OkHttp 拦截器来看 HTTP 协议二
android·网络·okhttp
酷爱码14 天前
jQuery Ajax中dataType 和 content-type 参数的作用详解
ajax·okhttp·jquery
追随远方15 天前
Android OkHttp控制链:深入理解网络请求的流程管理
android·网络·okhttp
追随远方15 天前
网络框架二次封装:基于Kotlin的高扩展性网络请求框架完整实现
android·网络·okhttp·kotlin