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

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

相关推荐
洛克大航海1 天前
Ajax基本使用
java·javascript·ajax·okhttp
whltaoin7 天前
Java 网络请求 Jar 包选型指南:从基础到实战
java·http·okhttp·网络请求·retrofit
华农第一蒟蒻8 天前
谈谈跨域问题
java·后端·nginx·安全·okhttp·c5全栈
一直向钱9 天前
android 基于okhttp的socket封装
android·okhttp
linuxxx1109 天前
ajax回调钩子的使用简介
okhttp
一直向钱11 天前
android 基于okhttp 封装一个websocket管理模块,方便开发和使用
android·websocket·okhttp
linuxxx11012 天前
ajax() 回调函数参数详解
前端·ajax·okhttp
linuxxx11014 天前
ajax与jQuery是什么关系?
ajax·okhttp·jquery
耀耀_很无聊16 天前
12_OkHttp初体验
okhttp
heeheeai16 天前
okhttp使用指南
okhttp·kotlin·教程