为了账号安全,请及时绑定邮箱和手机立即绑定

Google Cloud Datatore Go 客户端默认不关闭连接?

Google Cloud Datatore Go 客户端默认不关闭连接?

Go
狐的传说 2023-07-26 17:37:20
我从 App Engine on Go 1.9迁移到1.11时遇到了很多问题。当我按照如何迁移的指南进行操作时,我注意到内存使用量疯狂增长。之前它一直保持在50-60 MB左右,但现在它快速增长到1.5 GB ,并且实例开始出现故障。但后来我注意到所有显示如何使用 GCP 数据存储的示例都只是替换了之前的示例datastore.Get()和dsClient := datastore.NewClient(...) dsClient.get()然后,当我仔细观察这个客户端时,它创建了一个连接,但似乎从未关闭它,因此当我在defer dsClient.Close()创建一个新客户端(基本上在每个调用处理程序中)后添加一个连接时,内存开始从大约60- 80 MB到 ~ 500 MB,然后丢弃;它一直这样运行,但很稳定,所以我认为它时不时地进行一次 GC。然而,几天后,它再次失败,请求永远持续下去,并且创建新实例,直到达到上限(之前失败得更快)。所以我想知道是否应该在 main 中创建一个数据存储客户端?这是一个好的做法吗?而且,如果是这样,为什么所有示例都显示它是在调用句柄中创建的,并且为什么从不调用来关闭连接?谢谢!
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

我几乎做了同样的事情,但 godoc 说创建一个客户端并将其重用于所有数据存储操作。无需关闭连接。


    // Create a datastore client. In a typical application, you would create

    // a single client which is reused for every datastore operation.

    dsClient, err := datastore.NewClient(ctx, "my-project")

    if err != nil {

        // Handle error.

    }

https://godoc.org/cloud.google.com/go/datastore


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信