登录
首页 >  Golang >  Go问答

客户端超时时等待标题

来源:stackoverflow

时间:2024-03-25 18:12:34 181浏览 收藏

Go 客户端应用程序在连接到 New Relic 服务器时遇到客户端超时错误。该错误发生在等待服务器发送响应头时。尽管增加了超时时间并使用了 HTTP2,但问题仍然存在。故障排除工具 ./nrdiag 未能检测到问题。代码中没有明显的超时设置,表明超时可能是由网络延迟或 DNS 问题引起的。

问题内容

我遇到以下错误,我使用的是 go v1.10.4 linux/amd64。

我没有任何防火墙之类的东西。我们的java服务器(同一网段)中的new relic运行良好。

我们已经尝试过:

  • 将超时时间增加到 60 秒
  • 在服务器中使用http2
  • 使用 postman 返回 503 和响应:

    {“异常”:{“消息”:“服务器错误”,“error_type”:“运行时错误”}}

  • 使用 ./nrdiag 进行故障排除时显示“未发现问题”

下面是我们的代码:

    config := newrelic.NewConfig(os.Getenv("NEW_RELIC_APP_NAME"), os.Getenv("NEW_RELIC_KEY"))

    config.Logger = newrelic.NewDebugLogger(os.Stdout)

    app, err := newrelic.NewApplication(config)
    if err != nil {
        fmt.Println("Failed to create newrelic application", err)
        os.Exit(1)
    }

.................

        httpListener, err := net.Listen("tcp", *httpAddr)
        if err != nil {
            oldlog.Print("Error: ", err)
            logger.Log("transport", "HTTP", "during", "Listen", "err", err)
            os.Exit(1)
        }
        g.Add(func() error {
            logger.Log("transport", "HTTP", "addr", *httpAddr)
            return http.Serve(httpListener, nrgorilla.InstrumentRoutes(httpHandler, app))
        }, func(error) {
            httpListener.Close()
        })
    }

但是我们得到的是这个,注意 some_key 已被删除:

(28422) 2019/07/29 18:08:50.058559 {"level":"警告","msg":"应用程序连接失败","context":{"error":"发布 https://collector-001 .eu01.nr-data.net/agent_listener/invoke_raw_method?license_key=some_key\u0026marshal_format=json\u0026method=connect\u0026protocol_version=17:net/http:请求已取消(等待标头时超出了 client.timeout)"}}


解决方案


我认为这是由于 DNS 网络超时造成的。

您可以使用以下步骤轻松测试这一点(在 Ubuntu 中)

  1. 选择“IPv4 设置”选项卡。
  2. 禁用“自动”切换开关并输入 DNS 解析器的 IP 地址,以逗号分隔。我们将使用 Google DNS 名称服务器:

    8.8.8.8,8.8.4.4

如果有效,那么您可以将 DNS 重置为“自动”

今天关于《客户端超时时等待标题》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>