繁体   English   中英

Go1.12 2nd Gen AppEngine Standard 无法向外部资源发出任何请求

[英]Go1.12 2nd Gen AppEngine Standard cannot make any request to external resource

我遇到了一个关于 AppEngine 行为的非常奇怪的问题。 我们目前正在从 1.9 版本迁移到 1.12,因为 1.9 将在 10 月 1 日之后过时。 一切都很顺利,所有 API 都已迁移,等等。在暂存环境中进行了测试(几天的单独 GC 项目)。

投产后,6小时左右一切正常(,)。 之后所有请求都超时了。 以前的 1.9 版本保持活动状态,流量被重新路由到它。

现在这似乎不是负载问题:在事件部署 Go 1.12 运行时而不将其切换为活动版本并且私下访问(单个请求:)后,如果应用程序处理程序必须发出任何请求,则无法及时处理存储, 数据存储。 甚至普通的 http 请求都不起作用。 例如。 甚至缩小到:

在部署后其他一切产生超时之前,将此代码放在 main 中!

AppEngine 标准环境。 去1.12。 所以没有urlfetch。 示例代码(甚至不需要请求,测试了多个 url,全部在本地和 STG Google Cloud 项目上使用相同的代码):

func main() {
    fmt.Printf("Testing request to external server\n")
    resp, err := http.Get("https://www.example.com")
    if err != nil {
        fmt.Printf("Error making request to external server: %v\n", err)
    }

    data, err := ioutil.ReadAll(resp.Body)
    if len(string(data)) > 255 {
        fmt.Printf("Content: %v\n", string(data)[0:255])
    } else {
        fmt.Printf("Content: %v\n", string(data))
    }
    resp.Body.Close()
    ...
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), r))
}

部署后实例启动期间出现此消息

Error making request to external server: Get https://www.example.com: dial tcp 123.123.123.123: i/o timeout
Start program failed: failed to detect app after start: ForAppStart(): [aborted, context canceled. subject:"app/valid" Timeout:30m0s, attempts:6073 aborted, context canceled. subject:"app/invalid" Timeout:30m0s, attempts:6074]

(第二行是可以理解的——它只是无法连接并等待太久)。

最奇怪的是,如果将此代码部署在暂存环境(完全相同的文件)上它可以工作。 似乎 GAE 在几个小时内在生产环境中耗尽了连接尝试或类似的东西(这是一个相当高负载的项目)并且无法继续。

这种行为可能是什么问题? 它是一个错误吗? 什么可能泄漏以及如何诊断? 我已经没有想法了,在谷歌上搜索了几个小时,任何帮助将不胜感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM