PHP Mongo Ошибка чтения из сокета

За последние пару дней мой журнал ошибок был заполнен этой ошибкой:

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']}"); }; } } 

Related of "PHP Mongo Ошибка чтения из сокета"

Существует известная проблема с PHP / mongoclient + Apache + MongoDB, где недействительные постоянные соединения остаются открытыми процессом Apache.

Попробуйте перезагрузить веб-сервер Apache.

Что происходит:

  • Apache открывает соединение с вашим сервером MongoDB во время обычного запроса.
  • Предположительно, в какой-то момент вы перезапустили свой сервер MongoDB
  • Apache / PHP никогда не признает, что соединение было закрыто во время перезагрузки MongoDB и удержаться на постоянных подключениях, открытых ранее

Единственный способ преодолеть эту проблему – перезапустить Apache (заставляя его убивать все рабочие потоки и создавать новые соединения).

Дайте мне знать, если это сработает для вас.

Увеличение времени ожидания может помочь.

  • «socketTimeoutMS»: как долго может отправляться или получать по сокету до истечения времени ожидания.
  • «wTimeoutMS»: он контролирует, сколько миллисекунд сервер ожидает, что проблема с записью будет удовлетворена.
  • msgstr "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);