За последние пару дней мой журнал ошибок был заполнен этой ошибкой:
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']}"); }; } }
Существует известная проблема с PHP / mongoclient + Apache + MongoDB, где недействительные постоянные соединения остаются открытыми процессом Apache.
Попробуйте перезагрузить веб-сервер Apache.
Что происходит:
Единственный способ преодолеть эту проблему – перезапустить Apache (заставляя его убивать все рабочие потоки и создавать новые соединения).
Дайте мне знать, если это сработает для вас.
Увеличение времени ожидания может помочь.
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);