Я использую PHP драйвер mongodb / mongodb v 1.1.2
Информация о водителе низкого уровня:
mongodb version => 1.1.7
mongodb stability => stable
libmongoc version => 1.3.5
libbson version => 1.3.5
MongoDB 3.4.7 и 3.4.10
Варианты подключения:
socketTimeoutMS=3600000
Параметры курсора:
maxTimeMs: 360000
noCursorTimeout: true
Поэтому я предполагаю, что курсор должен быть бессмертным
Программа работала нормально, затем она вылетела со следующей ошибкой:
[29-Nov-2017 15:23:04 UTC] PHP Fatal error: Uncaught MongoDB\Driver\Exception\RuntimeException: Cursor not found (namespace: 'xxxx.yyyy', id: 6220790657981310420).
В бревнах mongos я вижу
2017-11-29T15:21:12.025+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:21:16.026+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:21:20.026+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
...
2017-11-29T15:22:56.029+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:23:00.029+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:23:04.029+0000 I QUERY [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
Обратите внимание, что отметка времени «бездействует с» одинакова для всех строк. Я почти уверен, что программа активно извлекала данные из этого курсора.
У меня нет точного времени создания курсора, но это произошло не ранее 15:03:35.
Проблема очень редкая. У меня много активных курсоров, некоторые из них живут часами. Этот был убран через 20 минут
Единственная поддерживаемая Коллекция варианты
maxTimeMS
а также noCursorTimeout
варианты Курсор. Вы должны передать их в find()
и подобные команды.
Других решений пока нет …