从套接字读取PHP Mongo错误

ade*_*r11 4 php mongodb

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

send_package: error reading from socket: The socket is closed
Run Code Online (Sandbox Code Playgroud)

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

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

生成错误的行是:

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

我偶尔也会从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']}");
        };
    }
    }
Run Code Online (Sandbox Code Playgroud)

Col*_*n M 7

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

尝试重新启动Apache Web服务器.

会发生什么:

  • 在正常请求期间,Apache会打开与MongoDB服务器的连接.
  • 据推测,在某些时候你已经重新启动了你的MongoDB服务器
  • Apache/PHP从未意识到在MongoDB重启期间连接已关闭,并且保持先前打开的持久连接

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

如果这对您有用,请告诉我.