关于 httpclient4.3.5 ssl handShake时卡住的问题
来源:互联网 发布:兄弟连php培训怎么样 编辑:程序博客网 时间:2024/06/05 20:42
最近碰到一个问题,百度没有发现问题的解决办法,记录下来,提醒自己,也希望其他人碰到相同问题也可以查看到。
问题原因:httpclient4.3.5 在某种情况下产生的由防火墙导致的超时bug
有一个定时任务来触发一个singleThreadPool执行任务,但是发现这个任务会在执行一半就卡住,下一个时段相同的定时任务也不再执行。排查log发现,系统执行至一个httpclient调用的地方就不会再打出后续的log。初步判断是httpclient.excute()阻塞了线程,导致singleThreadPool的线程被占用,后续的定时任务只能等待。
“Thread-14” - Thread t@128
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
- locked <5f4de726> (a java.lang.Object)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
- locked <7382a0ab> (a java.lang.Object)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
多次查看dump发现线程确实卡在httpclient.excute()更深层的ssl的starthandshake()处,一度怀疑是服务器证书问题导致,不过百度没有得到有用的信息,有一篇文章的讲解应该是切中了原理,分析了请求卡在read()方法上。后来通过stackoverflow发现了相同的问题,httpclient4.3.5的bug,导致在此处阻塞。4.3.6已修复。
解决方法:升级到httpclient4.3.6即可
附上stackoverflow关于此问题的回答,github的更新和httpclient关于此条的wiki
https://stackoverflow.com/questions/28785085/how-to-prevent-hangs-on-socketinputstream-socketread0-in-java
https://github.com/apache/httpcomponents-client/commit/d954cd287dfcdad8f153e61181e20d253175ca8c
https://issues.apache.org/jira/browse/HTTPCLIENT-1589
- 关于 httpclient4.3.5 ssl handShake时卡住的问题
- Android关于 https SSL handshake aborted 问题查找
- HttpClient4.3 关于https 中SSL证书请求问题
- 安装 svn时 SSL handshake failed
- Ubuntu 安装 svn时 SSL handshake failed
- 关于HttpClient4.3.*的Post和Get提交乱码问题
- 关于UIActionSheet的兼容ios7时界面卡住和崩溃的问题
- Unity打开工程时卡住的问题
- nfs卡住的问题
- 关于ubuntu 64位 android studio 运行时,gradle卡住的问题
- 关于ssl证书的问题
- ubuntu12.04 安装 svn时 SSL handshake failed
- Mac安装curl带SSL,PHP扩展curl,解决SSL peer handshake failed问题
- HTTPClient4.3.5的示例
- SSL/TLS Handshake 握手 连接
- CFtpFileFind FindFile卡住的问题
- 绕过offlieimap卡住的问题
- CFtpFileFind FindFile卡住的问题
- Spring静态注入
- kattle使用手册翻译-PDI数据转换教程
- uC/OS-II系统开发笔记
- Eclipse下,选项Add variable attributes to generated class files (used by the debugger)的含义
- IDL中编写自定义Task需要注意的问题
- 关于 httpclient4.3.5 ssl handShake时卡住的问题
- github添加ssh key
- 初级入手Javascri
- HDU 4578 Transformation
- ccf认证markdown
- Android开发笔记-音频录制/播放&音频
- 大数据初学必须掌握的技能
- Unable to create Debug Bridge:Unable to start adb server
- 惯性动作捕捉之工业设计