4

昨天出现了一个奇怪的行为:

在小负载上,所有查询都需要很长时间,然后站点返回错误“与 MongoDB 的连接失败。操作正在进行中”在 mongostat 我们看到大约 10-30 个连接(非常小,因为我们通常使用 400-500)但是当我输入“netstat -na | grep 27017” 我看到大量的 TCP 连接(> 150):

http://pastebin.com/3ghtwkVd

为什么mongodb关闭连接但TCP仍然打开?

我们不使用持久连接,并且总是在脚本末尾执行 Mongo:close()。

在 Amazon EC2 等云系统上进行站点工作(我们没有观察到任何网络问题)

10.1.1.16 - MongoDB 10.1.1.7 - 服务器之间的 Apache 1Gbit/s 操作系统:Debian 6 Squeeze MongoDB:1.8.2(与 1.6.6 我们有同样的问题) Apache 2 PHP 5.3.6 PHP mongo driver 1.1.0(连接1.2.x 中的池化对我们来说非常不利)

4

1 回答 1

0

看起来您的驱动程序(例如 PHP)实际上并没有关闭 TCP 连接,即使您使用该方法关闭它也是如此。

如果您使用 PHP 作为模块,请尝试优雅的 apache reload 以使 PHP 模块卸载并再次加载。这样,就会调用析构函数并关闭连接。

如果您使用 PHP 作为 fastcgi 应用程序,请重新启动(杀死/执行)它并再次调用。

如有必要,请提交错误。

于 2013-02-04T10:50:25.690 回答