4

最近几天,我的错误日志充满了这个错误:

send_package: error reading from socket: The socket is closed

我真的不知道这是从哪里来的。看起来我的 MongoDB 服务器没有打开 TCP 套接字,但我真的只是在猜测。

有没有人见过这个错误或知道如何处理它?

产生错误的行是:

$mongo = new Mongo("mongodb://user:pwd@host/db",array('timeout'=>6000));

我也偶尔会从 Pimple DIC 中进入:

    class HurstDI extends \Pimple
    {
        public function __construct(){
            $this['mongoUser'] = 'user';
            $this['mongoPwd'] = 'pwd';
            $this['mongoHost'] = "host/db";
            $this['mongoTimeout'] = 6000;
            $this['mongodb'] = function($c){
            return new \MongoClient("mongodb://{$c['mongoUser']}:{$c['mongoPwd']}@{$c['mongoHost']}");
        };
    }
    }
4

2 回答 2

7

PHP/mongoclient + Apache + MongoDB存在一个已知问题,其中无效的持久连接被 Apache 进程保持打开状态。

尝试重新启动您的 Apache Web 服务器。

会发生什么:

  • Apache 在正常请求期间打开与 MongoDB 服务器的连接。
  • 大概,在某个时候你已经重新启动了你的 MongoDB 服务器
  • Apache/PHP 永远不会识别连接在 MongoDB 重新启动期间关闭并保留之前打开的持久连接

解决此问题的唯一方法是重新启动 Apache(强制它终止所有工作线程并创建新连接)。

让我知道这是否适合您。

于 2013-01-10T02:17:15.377 回答
0

增加超时可能会有所帮助。

  • "socketTimeoutMS" :在超时之前套接字上的发送或接收需要多长时间。
  • "wTimeoutMS" :它控制服务器等待写关注得到满足的毫秒数。
  • "connectTimeoutMS" :在超时之前打开连接需要多长时间(以毫秒为单位)。

    $m = new MongoClient("mongodb://127.0.0.1:27017", array("connect"=>TRUE, "connectTimeoutMS"=>10, "socketTimeoutMS"=>10, "wTimeoutMS"=>10));
    
        $db= $m->mydb;
        $coll = $db->testData;
        $coll->insert($paramArr);
    
于 2014-02-18T10:57:56.943 回答