8

我已经多次看到这个错误,要修复它,我只需重新启动我的服务器。

致命错误:未捕获的异常“MongoConnectionException”,消息“无法连接到:localhost:27017:以前的连接尝试失败,服务器被列入黑名单”在 /var/www/html/include/config.php:9 堆栈跟踪:#0 /var /www/html/include/config.php(9): MongoClient->__construct('mongodb://local...') #1 /var/www/html/classes.php(3): include('/ var/www/html/i...') #2 /var/www/html/myusers.php(8): include('/var/www/html/c...') #3 {main} 抛出在第 9 行的 /var/www/html/include/config.php 中

但是,我可以有一段时间没有看到它......我怎样才能防止问题发生?

更新:再次发生,等待几分钟后,我不得不重新启动以使站点再次工作

4

3 回答 3

15

由于 PHP 的 MongoDB 驱动程序的 1.4 版本,如果无法联系到服务器,我们会将服务器“列入黑名单”长达一分钟。这样我们就不会用连接猛击服务器,这可能会超时。这样做主要是为了确保在副本集环境中我们仍然可以只使用另一台主机来继续,但是当然如果你只有一台机器,这有点棘手。

如果您使用 MongoLog,那么您可以很容易地发现引擎盖下发生的事情:

MongoLog::setModule(MongoLog::ALL);
MongoLog::setLevel(MongoLog::ALL);
MongoLog::setCallback('print_mongo_log');
function print_mongo_log($a, $b, $c) { echo $c, "\n"; }

这将显示驱动程序正在尝试执行的所有操作。看到出现问题时的第一次转储会很有趣,并且有一次它“卡在”黑名单上。

上述警告将在 60 秒后消失,或者在您的 Web 服务器软件(或 PHP-FPM 是您使用的)重新启动后消失。如果您认为此解释不正确,请在http://jira.mongodb.org/browse/PHP提交错误/功能请求

于 2013-07-29T12:14:05.797 回答
1

显然,这是由 MongoDB 的 PHP 驱动程序中的错误引起的问题。检查您是否使用的是 1.4.0 版本,如果是,请更新到较新的版本并修复错误。

于 2013-07-29T08:39:06.483 回答
0

似乎 mongo 自己处理连接,如果要使用持久性 mongo 连接,则不应在代码中使用 close 连接,我已经通过从 mongo 连接 php 脚本中删除 close 解决了这个问题,如下所示:

不要使用关闭.......

$client = new MongoClient("mongodb://127.0.0.1:27017");
//close mongo connection
$client->close();

希望有用。

于 2016-01-06T07:32:38.437 回答