关于连接超时日志

2020-04-29 16:12:51 +08:00
 pmispig

很长一段时间内我们应用的日志都是超时都是下面这样的,不管 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 java.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) 

至于你连谁超时,抱歉,无可奉告! 这个应该算是底层库的设计缺陷还是使用者的问题?

2354 次点击
所在节点    Java
8 条回复
xgfan
2020-04-29 17:35:10 +08:00
使用者。
一个 tcp 连接,底层鬼知道你连的啥。
再说,你这个日志不是已经写了吗,httpClient
chendy
2020-04-29 21:27:05 +08:00
就超时,谁写的问谁,谁的服务问谁…
opengps
2020-04-29 22:11:15 +08:00
var url = "xxxxxx";
try{
//code
web 请求 url
}catch(Exception ex){
//日志记录异常信息
ex.ToString ();//你的日志只记录了这个
url;//日志还应该记录这个
pmispig
2020-04-30 09:10:12 +08:00
@xgfan 比如 httpclient 这一层,得把域名或者 IP 抛出来吧,就知道 httpclient,鬼知道你连的谁
Jrue0011
2020-04-30 12:53:24 +08:00
@pmispig http component 4.5 如果只是建立连接失败的话应该是会带上 host 信息的(ConnectTimeoutException 、HttpHostConnectException),后面 socket 读取异常貌似就不带了
pmispig
2020-04-30 13:37:13 +08:00
@Jrue0011 我觉得就是这些底层的包不负责任。要是我来设计 一个 httpclient 的话,底层的 socket timeout 要抛出 ip 和端口,httpclient 顶层要抛出完整域名
cyd
2020-05-15 16:59:58 +08:00
巧了,我也遇到这个异常。刚刚解决。
原因是 httpclient 默认永久连接,服务端空闲时间过长,断连客户端,客户端无感知,连接复用时候就报错了。
得按照官方文档说法,另启个线程检测,搜索这个 IdleConnectionMonitorThread 就行。
pmispig
2020-05-15 17:07:06 +08:00
@cyd 这个问题,不仅 httpclient 有,mysql 连接池也有这种问题,都是同样的思路,定时检测,用之前检测。不过我主贴主要说的是异常不找到源头,也有可能是调用的接口确实挂了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX