簡體   English   中英

MongoDB PHP副本集連接永遠不會關閉

[英]MongoDB PHP replicaSet connections never close

當沒有副本時連接到mongo時,例如:

new Mongo('mongodb://localhost');

一切正常,一旦超出范圍,連接就會關閉,與mongo的連接總數約為10。

PRIMARY> db.serverStatus().connections;
{ "current" : 6, "available" : 19994 }

但是,當我指定一個copysetSet時,連接永遠不會關閉,它們只會不斷堆積,只有在我重新啟動php-fpm進程時才會關閉。

new Mongo('mongodb://localhost', array("replicaSet" => "set"));


PRIMARY> db.serverStatus().connections;
{ "current" : 1298, "available" : 18702 }

最奇怪的是,Mongo應該支持多達20,000個連接。 當我達到約700個與mongo的連接時,FPM開始失敗。

我在下面編寫了一個小的抽象層來幫助調試問題,在這兩種情況下,都會調用close()並返回true。 不會拋出異常。 有什么想法嗎? 我正在使用PHP 5.3.8-1 (fpm)php-mongo-driver v1.2.7

class MongoDBI {
  private static $_db;
  private static $_mongo;
  private static $_instance;

  private function __construct() {
    try {
      self::$_mongo = new Mongo(MONGODB_SERVER, array("replicaSet" => "set"));
      self::$_db = self::$_mongo->selectDB(MONGODB_DATABASE);
    } catch(MongoConnectionException $e) {
      log("Unable to connect to Mongo: " . $e->getMessage()  . "\n");
    } catch(Exception $e) {
      log("Mongo: " . $e->getMessage()  . "\n");
    }
  }

  public function __destruct() {
    try {
      $status = self::$_mongo->close();
      log("STATUS: " . $status . "\n");
    } catch(Exception $e) {
      log("Mongo: " . $e->getMessage()  . "\n");
    }
  }

  public static function getInstance() {
    if(!isset(self::$_db))
       self::$_instance = new MongoDBI();

    return self::$_db;
  }
}

編輯:rs.status();

PRIMARY> rs.status()
{
    "set" : "somereplicaset",
    "date" : ISODate("2011-11-02T20:33:14Z"),
    "myState" : 1,
    "members" : [
            {
                    "_id" : 0,
                    "name" : "node1:27017",
                    "health" : 1,
                    "state" : 1,
                    "stateStr" : "PRIMARY",
                    "optime" : {
                            "t" : 1320265677000,
                            "i" : 1
                    },
                    "optimeDate" : ISODate("2011-11-02T20:27:57Z"),
                    "self" : true
            },
            {
                    "_id" : 1,
                    "name" : "node2:27017",
                    "health" : 1,
                    "state" : 2,
                    "stateStr" : "SECONDARY",
                    "uptime" : 703192,
                    "optime" : {
                            "t" : 1320265677000,
                            "i" : 1
                    },
                    "optimeDate" : ISODate("2011-11-02T20:27:57Z"),
                    "lastHeartbeat" : ISODate("2011-11-02T20:33:13Z"),
                    "pingMs" : 0
            }
    ],
    "ok" : 1
}

原來這是mongo-php-driver v1.2.7中的錯誤,降級到1.2.6可以完全解決該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM