代理服务器httpclient未设置超时

0 背景:

netty(二十四)http代理服务器(三)fiddler【重点】之后,在换了台电脑了,发现还是会访问10几个网页后出页面速度变慢,最终卡死

 

 

 

 

发现有16个连接的差

 


 

这里已经猜猜有对外请求阻塞了,而消息队列的并发数为10

 

 

 

 

jstack后果然发现10个线程卡在对外请求中,即是对谷歌服务器的请求

消息队列容量为100,所以不至于生产端阻塞netty io线程,但是httpclient迟迟没有response,导致服务器连接一直无法关闭,导致了16个连接差,ps:我的机器居然16个连接就不行了,当然也有可能同一个host 6个连接全阻塞,导致浏览器死了,这种可能性更大些

 

1 修改:设置httpclient超时

httpUriRequest.setConfig(RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(10000).build());

 第一個是連接超時,第二個是讀取超時,不過一般讀取超時,超過10s就是服務器不行了

点了30+网页,还挺正常

 

 

 

1266对1264,好像还有2条连接落网了,猜测为还没到超时异常抛出

 

2 再试一次

 

 

 

 

始终有2个连接差


 

 

果然是卡在send那边

最终等待一会结果符合预期

 


 3:认为系统始终有2条连接在向谷歌发送数据,关了chrome浏览器也还有,估计注册为服务了

4 不再使用netty(二十八)http代理服务器(七)让浏览器阻塞 1.4的阻塞同步

 

ps,一度以为没加也阻塞(本文都是在operationComplete内close连接这种方式实践的),因为jstack显示阻塞在send,就以为阻塞了

实际sync阻塞的是代理服务器到浏览器的连接发送,而本文实践是阻塞在httpclient对外发送的阻塞,根本不是一回事

 

 

 

 

阻塞在CloseableHttpClient这里,并不是sync

ffff.txt

 

tmp.txt

 

 

 

 



 

 



 

posted on   silyvin  阅读(84)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2019-12-11 equals 与 ==
2019-12-11 hashcode & System.identityHashCode
2017-12-11 redistemplate 乐观锁实践
2017-12-11 redistemplate事务实践
2017-12-11 通过HttpURLConnection 上传文件
2017-12-11 mysql使用kill命令解决死锁问题,杀死某条正在执行的sql语句
2017-12-11 由一个bug 引出的 hibernate 三种状态
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示