4

ここ数日、私のエラー ログには次のエラーが記録されています。

send_package: error reading from socket: The socket is closed

これがどこから来ているのか本当にわかりません。MongoDB サーバーが TCP ソケットを開いていないように見えますが、実際には推測にすぎません。

このエラーを以前に見たことがある人、または対処方法を知っている人はいますか?

エラーを生成する行は次のとおりです。

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

私は時折、にきびの 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 に答える