0

何年も正常に実行されていた cron ジョブが、約 80% の完了後に突然停止し始めました。結果を含むコレクションが着実に成長し、ある程度の重要なサイズに達したためか (私にはそれほど大きくないようです)、それとも他の理由によるものかはわかりません。これをデバッグする方法がわかりません。ジョブが終了したユーザーを見つけ、このユーザーのジョブを実行しようとしたところ、2 時間後に CURSOR_NOTFOUND メッセージが表示されました。昨日、すべてのユーザーに対して 3 時間実行した後、停止しました。複数の依存関係と変更する時間がないため、古いモンゴイド (2.0.0.beta) をまだ使用していますが、モンゴは最新です ( 1.1.2 より前のバージョンのバグについては知っています)。

似たような質問が 2 つ見つかりましたが、どちらも当てはまりません。この場合、彼らは生産準備が整っていない Mopped を使用しました。そしてここで問題はページネーションにありました。

このエラーメッセージが表示されます

MONGODB cursor.refresh() for cursor xxxxxxxxx
rake aborted!
Query response returned CURSOR_NOT_FOUND. Either an invalid cursor was specified, or the cursor may have timed out on the server.

助言がありますか?

4

1 に答える 1

2

MongoDB からの「カーソルが見つかりません」というエラーは、通常、カーソルが (非アクティブ状態が 10 分間続いた後) タイムアウトしたことを示していますが、クライアント コードが混乱し、古いカーソルまたは閉じたカーソルを使用しているか、カーソルが破損していることを示している可能性があります。何とかして。3 時間のランタイムで、MongoDB への呼び出しの間にクライアントで多くのビジー時間が含まれている場合、サーバーがカーソルをタイムアウトにする時間を与える可能性があります。

カーソルに no-timeout オプションを指定して、問題の原因がカーソルのサーバー タイムアウトであるかどうかを確認できます。

于 2012-06-04T21:10:59.550 に答える