HttpURLConnection getResponseCode()方法阻塞
2016-06-04 18:07
1386 查看
近期Quartz抓取程序是不是会阻塞,一直以为是Quartz版本太低存在bug。今天又阻塞了,无法容忍了,开始找原因:
1、先从日志中找到了执行job的线程 “2016-06-03 23:45:12,579 [TOPST_Quartz_Worker-13]”
2、使用jstack命令查看线程堆栈
可见,问题出在HttpURLConnection的getResponseCode()方法上,线程一直处于运行状态,但是被阻塞在了at java.net.SocketInputStream.socketRead0(Native Method)
3、检查代码
// 构造URL
URL url = new URL(imagePath);
// 打开连接
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("contentType", "UTF-8");
// 设置请求超时为5s
con.setConnectTimeout(5 * 1000);
con.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
if (con.getResponseCode() == 200) {
...
}也设置了超时时间。
4、尝试查找“java.net.SocketInputStream.socketRead0(Native Method)”阻塞的原因,没有靠谱的解决方案。后来看到http://blog.csdn.net/h3c4lenovo/article/details/9985719
这篇文章才发现没有设置readTimeout,加上代码con.setReadTimeout(10_1000);// 设置getInputStream超时时间
运行一段时间看看吧。
1、先从日志中找到了执行job的线程 “2016-06-03 23:45:12,579 [TOPST_Quartz_Worker-13]”
2、使用jstack命令查看线程堆栈
可见,问题出在HttpURLConnection的getResponseCode()方法上,线程一直处于运行状态,但是被阻塞在了at java.net.SocketInputStream.socketRead0(Native Method)
3、检查代码
// 构造URL
URL url = new URL(imagePath);
// 打开连接
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("contentType", "UTF-8");
// 设置请求超时为5s
con.setConnectTimeout(5 * 1000);
con.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
if (con.getResponseCode() == 200) {
...
}也设置了超时时间。
4、尝试查找“java.net.SocketInputStream.socketRead0(Native Method)”阻塞的原因,没有靠谱的解决方案。后来看到http://blog.csdn.net/h3c4lenovo/article/details/9985719
这篇文章才发现没有设置readTimeout,加上代码con.setReadTimeout(10_1000);// 设置getInputStream超时时间
运行一段时间看看吧。
相关文章推荐
- 配置nginx负载TCP服务器
- HTTP 请求方式: GET和POST的比较
- JavaScript---网络编程(3)-Object、String、Array对象和prototype属性
- JavaScript---网络编程(3)-Object、String、Array对象和prototype属性
- 解决- schema_reference.4: Failed to read schema document 'http://www.springframe
- Edusoho 网络课堂安装教程
- 基于Linux的网络编程
- 网络编程的基本概念
- Android Http缓存数据处理
- 开源的49款Java 网络爬虫软件
- HTTP的请求方法OPTIONS
- 《Indy In Depth》中文版
- 安卓HTTP实例中post方法和get方法的区别
- ISCSI 用法及简单配置
- TCP滑动窗口机制
- Python 3.5 HTTP服务器端重定向测试脚本
- 网络获取数组信息,根据姓名按首字母排序 添加侧滑删除。
- 使用Socket进行设备间点对点连接传输数据
- note02-计算机网络
- note01-计算机网络