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上下,无形中把这个问题放大了。

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

相关推荐
小白学大数据3 天前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
前端百草阁6 天前
【吃透 Promise】从基础到面试高频(手写 + 输出题 + 原理)
okhttp·面试·职场和发展
ppandss17 天前
JavaWeb从0到1-DAY4-AJAX
前端·ajax·okhttp
4311媒体网11 天前
织梦CMS点击率统计实现方法
okhttp
帅次12 天前
链路到端上:HTTPS 之后安全题还在考什么
android·okhttp·glide·zygote·retrofit
djk888813 天前
layui zTree 控件 AJAX绑定 点击tree事件 获取tree值
ajax·okhttp·layui
明天就是Friday14 天前
Android实战项目④ OkHttp WebSocket开发即时通讯App 完整源码详解
android·websocket·okhttp
xiangxiongfly91515 天前
Android 使用WebSocket通信
android·websocket·网络协议·okhttp
研☆香16 天前
聊聊什么是AJAX
前端·ajax·okhttp
sunwenjian88618 天前
跨域问题解释及前后端解决方案(SpringBoot)
spring boot·后端·okhttp