gpt4 book ai didi

mongodb - 使用 mgo 对 MongoDB 的并发查询以封闭的套接字结束

转载 作者:IT王子 更新时间:2023-10-29 01:09:11 25 4
gpt4 key购买 nike

我一直在 stackoverflow + 一些帖子中检查几个问题,人们在这些帖子中展示了如何使用 mgo golang lib 管理 session 的示例。 .

要点是,我见过的所有示例都不会同时运行太多并发查询。增加并发操作的数量以关闭的套接字结束。在这里您可以找到我为了重现此行为而运行的代码。

Concurrent queries to MongoDB using mgo ends in closed sockets.

请注意,我正在运行 200 个并发查询,并为每个查询打开一个新套接字。 200 不是一个大数字。

我看到的错误是:

读取 tcp 127.0.0.1:59583->127.0.0.1:27018:读取:对等方重置连接

明确关闭

我该如何处理?我想保持这个并发级别,甚至在某个时候增加它。

最佳答案

如果我将插入数增加到 5000 以上,结果与不在 docker 容器中的 Mongo 数据库相同。没有 session 副本的插入工作正常,而带有 session 副本的插入最终出现 mongo 错误“明确关闭”。

根据 William Kennedy blog ,推荐的方式确实是制作session copy。否则,这些操作将与同一套接字中的其他 go 例程序列化。

如果计算使用 mongoldb 打开的套接字数: 虽然是真的;执行 lsof -i | grep 27017 | wc -l ; sleep 0.5 ;完毕当我们没有 session 副本时,您会看到我们打开了一个套接字。当使用session copy时,sockets的数量可以提升到high number。

我认为在 mongo 或系统中达到了打开的套接字限制。 ulimit 可用于检查 shell 环境的限制。

请注意,根据设计,mgo 不允许对 session 数进行任何限制。这个想法是避免对数据库访问端进行限制,并促使开发人员在其代码的入口点引入限制:例如,限制同时处理的 http 请求的数量。

关于mongodb - 使用 mgo 对 MongoDB 的并发查询以封闭的套接字结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42735535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com