
很长一段时间内我们应用的日志都是超时都是下面这样的,不管 mysql,httpclient 还是什么
com.xx.oo.Exception: 发送请求数据异常 ..... ..... Caused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at jva.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) 至于你连谁超时,抱歉,无可奉告! 这个应该算是底层库的设计缺陷还是使用者的问题?
1 6IbA2bj5ip3tK49j 2020 年 4 月 29 日 使用者。 一个 tcp 连接,底层鬼知道你连的啥。 再说,你这个日志不是已经写了吗,httpClient |
2 chendy 2020 年 4 月 29 日 就超时,谁写的问谁,谁的服务问谁… |
3 opengps 2020 年 4 月 29 日 var url = "xxxxxx"; try{ //code web 请求 url }catch(Exception ex){ //日志记录异常信息 ex.ToString ();//你的日志只记录了这个 url;//日志还应该记录这个 } |
5 Jrue0011 2020 年 4 月 30 日 @pmispig http component 4.5 如果只是建立连接失败的话应该是会带上 host 信息的(ConnectTimeoutException 、HttpHostConnectException),后面 socket 读取异常貌似就不带了 |
6 pmispig OP @Jrue0011 我觉得就是这些底层的包不负责任。要是我来设计 一个 httpclient 的话,底层的 socket timeout 要抛出 ip 和端口,httpclient 顶层要抛出完整域名 |
7 cyd 2020 年 5 月 15 日 巧了,我也遇到这个异常。刚刚解决。 原因是 httpclient 默认永久连接,服务端空闲时间过长,断连客户端,客户端无感知,连接复用时候就报错了。 得按照官方文档说法,另启个线程检测,搜索这个 IdleConnectionMonitorThread 就行。 |