【发布时间】:2019-10-02 07:13:30
【问题描述】:
我在从 Go 1.9 上的 App Engine迁移到 1.11 时遇到了很多问题。
当我按照指南进行迁移时,我注意到内存使用量急剧增长。之前它一直保持在 ~50-60 MB,但现在它迅速增长到 1.5 GB,并且实例开始出现故障。
但后来我注意到所有展示如何使用 GCP 数据存储的示例都替换了之前的
datastore.Get()
与
dsClient := datastore.NewClient(...) dsClient.get()
然后,当我仔细观察这个客户端时,它创建了一个连接,但似乎从未关闭它,所以当我在创建新客户端后添加defer dsClient.Close() 时(基本上在每个调用处理程序中) em>,内存开始从 ~60-80 MB 上升到 ~500 MB,然后下降;它一直这样运行,但它很稳定,所以我认为它时不时会进行 GC。然而,几天后它又失败了,请求永远持续下去,并创建了新实例,直到达到上限(以前失败得更快)。
所以我想知道我是否应该只在 main 中创建一个数据存储客户端?这是一个好习惯吗?如果是这样,为什么所有示例都显示它是在调用句柄中创建的,为什么从来没有调用关闭连接?
谢谢!
【问题讨论】:
标签: google-app-engine go google-cloud-datastore