V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pmispig
V2EX  ›  Java

关于连接超时日志

  •  
  •   pmispig · 2020-04-29 16:12:51 +08:00 · 2318 次点击
    这是一个创建于 1429 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    8 条回复    2020-05-15 17:07:06 +08:00
    xgfan
        1
    xgfan  
       2020-04-29 17:35:10 +08:00
    使用者。
    一个 tcp 连接,底层鬼知道你连的啥。
    再说,你这个日志不是已经写了吗,httpClient
    chendy
        2
    chendy  
       2020-04-29 21:27:05 +08:00
    就超时,谁写的问谁,谁的服务问谁…
    opengps
        3
    opengps  
       2020-04-29 22:11:15 +08:00
    var url = "xxxxxx";
    try{
    //code
    web 请求 url
    }catch(Exception ex){
    //日志记录异常信息
    ex.ToString ();//你的日志只记录了这个
    url;//日志还应该记录这个
    pmispig
        4
    pmispig  
    OP
       2020-04-30 09:10:12 +08:00
    @xgfan 比如 httpclient 这一层,得把域名或者 IP 抛出来吧,就知道 httpclient,鬼知道你连的谁
    Jrue0011
        5
    Jrue0011  
       2020-04-30 12:53:24 +08:00
    @pmispig http component 4.5 如果只是建立连接失败的话应该是会带上 host 信息的(ConnectTimeoutException 、HttpHostConnectException),后面 socket 读取异常貌似就不带了
    pmispig
        6
    pmispig  
    OP
       2020-04-30 13:37:13 +08:00
    @Jrue0011 我觉得就是这些底层的包不负责任。要是我来设计 一个 httpclient 的话,底层的 socket timeout 要抛出 ip 和端口,httpclient 顶层要抛出完整域名
    cyd
        7
    cyd  
       2020-05-15 16:59:58 +08:00
    巧了,我也遇到这个异常。刚刚解决。
    原因是 httpclient 默认永久连接,服务端空闲时间过长,断连客户端,客户端无感知,连接复用时候就报错了。
    得按照官方文档说法,另启个线程检测,搜索这个 IdleConnectionMonitorThread 就行。
    pmispig
        8
    pmispig  
    OP
       2020-05-15 17:07:06 +08:00
    @cyd 这个问题,不仅 httpclient 有,mysql 连接池也有这种问题,都是同样的思路,定时检测,用之前检测。不过我主贴主要说的是异常不找到源头,也有可能是调用的接口确实挂了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5736 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:11 · PVG 14:11 · LAX 23:11 · JFK 02:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.