HttpURLConnection getting locked
2016-09-09 11:19
246 查看
入职了一家做金融大数据的公司,终于走向Java开发者的正轨了~
最近遇到一个问题,服务器多线程程序在运行时,偶尔线程会发生死锁,进程在内存中不能释放,该程序会先删除数据库的表,执行完毕会新生成数据。这样就导致了数据库的表被清空,于是开始调查:
找到了问题所在,就是在 调用java 的HttpURLConnection 获取线上数据时,发生超时了:
解决方案:
第一步追加 设置从主机读取的超时设置
第二步追加多次链接尝试:
最近遇到一个问题,服务器多线程程序在运行时,偶尔线程会发生死锁,进程在内存中不能释放,该程序会先删除数据库的表,执行完毕会新生成数据。这样就导致了数据库的表被清空,于是开始调查:
ps -aux|grep app ps -eLf|grep app jstack -l pid > pid.log
找到了问题所在,就是在 调用java 的HttpURLConnection 获取线上数据时,发生超时了:
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) - locked <0x0000000674b25db8> (a java.io.BufferedInputStream) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535) - locked <0x0000000674b1a7a0> (a sun.net.www.protocol.http.HttpURLConnection) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440) - locked <0x0000000674b1a7a0> (a sun.net.www.protocol.http.HttpURLConnection) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
解决方案:
第一步追加 设置从主机读取的超时设置
URL url = new URL(urlStr); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setConnectTimeout(3000); httpConn.setReadTimeout(3000);//add httpConn.setDoInput(true); httpConn.setRequestMethod("GET"); httpConn.connect();//add
第二步追加多次链接尝试:
json = getJsonContent(URL); int i = 0; while (StringUtils.isEmpty(json) && i < 3) { json = getJsonContent(URL); i++; }
相关文章推荐
- Getting error "No subject alternative names" when doing secure URL connection(针对处理https连接的安全异常)(转:http://www.coderanch.com/t/134
- 用HttpURLConnection 在Java后台发送请求并接收返回数据
- 安卓网络-冰山一角之httpurlconnection
- HttpURLConnection实现文件下载,Service加Notification实现后台下载
- Socket、URLConnection 和HttpURLConnection的区别
- HttpClient和HttpURLConnection对比使用
- 【幻化万千戏红尘】qianfengDay27-HttpURLConnection,OkHttpClient,,多线程下载且断点续传基础学习:
- 通过代理抓取网页code方法 proxy httpurlconnection
- Android中如何使用HttpURLConnection实现GET POST JSON数据与下载图片
- 使用HttpURLConnection访问URL地址
- 使用 HttpURLConnection 获取不到网络数据
- java.net.HttpURLConnection的使用
- android服务器通信之HttpURLConnection
- Java使用HttpURLConnection上传文件
- Volley学习(五)HttpUrlConnection、Volley 2种方式实现头像上传
- HttpURLConnection下载静态网页,getResponseCode的值是405
- httpurlconnectionpost3
- HttpURLConnection POST 上传文件
- 详解HttpURLConnection
- Android 6.0 使用HttpURLConnection 使用Get提交遇到405等问题。