HttpClient超时故障
来源:互联网 发布:网络环境搭建 编辑:程序博客网 时间:2024/06/08 10:29
网站这边多次因为HttpClient超时问题导致Tomcat停止服务,影响非常不好,而且问题重复出现,查看网络,没有比较明确介绍httpclient所有超时相关的设置(大部分只提到连接超时(connection timeout),读超时(socket timeout),对连接池超时提到的比较少):
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
Tomcat进程假死,导致页面无法打开,堆栈信息如下:Name: trhead-142State: WAITING onorg.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool@69a4cbTotal blocked: 0 Total waited: 1Stack trace:java.lang.Object.wait(Native Method)org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)com.madding.test.MyRunnable.run(MyTest1.java:53)java.lang.Thread.run(Thread.java:619)
大部分线程等待在:org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection
分析:
问题:很明显连接池超时没设置,导致请求在线程池中无限等待,进而导致Tomcat进程假死。
解决办法1:httpclient.setHttpConnectionFactoryTimeout(1000),设置连接池超时。
解决办法2:httpclient.getParams().setConnectionManagerTimeout(1000),设置连接池超时。
进一步分析:
为什么没设置这个会导致请求等待:
MultiThreadedHttpConnectionManager代码在获取连接时去连接池取,而连接池在没设置超时timeToWait为0,即一直处于等待状态,如果没有notify不会结束等待。
试用
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2</version>
</dependency>
发现代码中即使不设置线程池超时,在高并发下也能正常访问,查看代码,发现是因为在默认没设置线程池超时时把连接超时的时间作为线程超时时间。
- HttpClient超时故障
- HttpClient超时故障
- HttpClient 超时 用法
- HttpClient超时设置
- httpclient超时总结
- httpclient 超时设置
- httpclient 3中超时
- HttpClient 超时 用法 .
- tornado httpclient 超时设置
- httpclient 超时设置
- httpClient超时设置
- HttpClient超时区别
- 安卓-httpclient超时
- HttpClient 4 设置超时
- HttpClient设置超时
- httpclient 超时设置
- HttpClient 4.3超时设置
- HttpClient超时设置
- P2P网贷谋求“去担保”:引入保险 收益下滑
- 定制iOS 7中的导航栏和状态栏
- hive 查询执行分析
- 数据库Sharding的基本思想和切分策略
- runOnUiThread和在子线程运行
- HttpClient超时故障
- Linux下网络流量实时监控工具 大全
- phonegap 添加admob广告教程
- easyexplore的下载,安装和使用
- “Unknown register name 'q0' in asm”
- yate--sip server的学习过程
- VS2010 中更改项目名称
- Linux中硬链接和软链接的区别和联系
- 内存泄露打断点