現在、複数のアプリケーションが使用しているMongoDBインスタンスを管理しています。 noTimeoutカーソルが蓄積されており、カーソルが圧倒され始めた場合は簡単にカリングできますが、メモリの浪費であるため、原因のプロセスを追跡したいと思います。
NoTimeoutカーソルの原点を表示する方法はありますか?元のクエリ、それが含まれているコレクション、または残っているデータであるかどうかにかかわらず、あらゆる情報が非常に役立ちます。
これらのドキュメント によると、カーソルで取得できる情報はdb.serverStatus().metrics.cursor
のみであり、カーソルの数のみが含まれ、個々のカーソルに関するデータは含まれていないようです。
追加情報を取得する方法はありますか?
これがDBAに適していない場合は、お詫び申し上げます。SOの質問としては適切ではなく、ServerFaultの開発に重点を置いているようです。これが問題であるかどうかをお知らせください。 。
私はこのコマンドを使用することになりました:
_mongo --quiet --eval "var c=new Mongo();var o=[];db.adminCommand('listDatabases').databases.forEach(function(d){o=o.concat(c.getDB(d.name).currentOp(true).inprog.filter(function(d){return d.op=='query';}).map(function(d){return d.query;}));});o" > cursor.json
_
そこにある実際のjsの拡張形式は
_var conn = new Mongo();
var cursorInfo = [];
db.adminCommand('listDatabases').databases.forEach(function(d) {
var database = conn.getDB(d.name)
cursorInfo = cursorInfo.concat(database.currentOp(true).inprog.filter(function(d) {
return d.op == 'query';
}).map(function(d) {
return d.query;
}));
});
cursorInfo
_
このコマンドは、db.currentOp(true).inprog
から、すべてのデータベースの現在のクエリカーソルに関する情報を取得し、それをファイル_cursor.json
_に保存します。