【问题标题】:How can I simulate a TCP dial timeout?如何模拟 TCP 拨号超时?
【发布时间】:2021-03-31 20:05:00
【问题描述】:

当节点(我们使用 Kubernetes)的 CPU 负载很高时,我们遇到了一些 TCP 拨号超时问题:用户在请求超过 30 秒后收到 504 状态码,但服务器从未收到这些请求。

我们使用 Traefik 作为 Ingress:forwardingtimeoutsdialtimeout - Traefik,我想弄清楚这是否导致了问题。如何模拟 TCP 拨号超时错误进行测试?

超时请求(time/request_time/upstream_status):

CPU 使用率:

【问题讨论】:

  • 如何用什么代码模拟拨号超时?大多数软件包都使用某种DialDialContext 函数,您可以随心所欲地使用它们。

标签: go tcp


【解决方案1】:
package main

import (
    "github.com/gin-gonic/gin"
    "time"
)

    func main() {
        app := gin.Default()
        app.GET("/", TO)
        app.Run(":4040")
    }
    func TO(c *gin.Context) {
        time.Sleep(time.Minute * 5)
        return
    }

定义一个延迟响应的处理程序,如果您使用Dial.Timeout 少于 5 分钟的时间发出请求。它将超时。

How to set timeout for http.Get() requests in Golang?

展示了如何在 go 的原生 http.Client 中设置超时值

【讨论】:

  • 这是 HTTP 超时,而不是 TCP 拨号超时。
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2019-01-31
相关资源
最近更新 更多