事象
MonogoDBのStatusを確認すると以下エラーとなる。
> db.serverStatus() { "operationTime" : Timestamp(xx,x), "ok" : 0, "errmsg" : "cannot add session into the cache", "code" : 261, "codeName" : "TooManyLogicalSessions", "$clusterTime" : { "clusterTime" : Timestamp(xx, x), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
環境情報
- MongoDB v4.0
原因/暫定対応
logicalSessionRecordCacheにおけるactiveSessionsCountが増えすぎているためDBアクセスに失敗している。
> db.serverStatus().logicalSessionRecordCache { "activeSessionsCount" : 100XXXX, "sessionsCollectionJobCount" : xx, "lastSessionsCollectionJobDurationMillis" : xx, "lastSessionsCollectionJobTimestamp" : ISODate("xx"), "lastSessionsCollectionJobEntriesRefreshed" : 0, "lastSessionsCollectionJobEntriesEnded" : 0, "lastSessionsCollectionJobCursorsClosed" : 0, "transactionReaperJobCount" : xx, "lastTransactionReaperJobDurationMillis" : 0, "lastTransactionReaperJobTimestamp" : ISODate("xx"), "lastTransactionReaperJobEntriesCleanedUp" : 0 }
同値は再起動処理によって明示的にリセットされるため暫定対応として再起動を行った。
以下、補足です。
補足
Node.jsからMongoDBにアクセスした際に以下エラーとなりました。
Exception in setInterval callback: MongoError: cannot add session into the cache at Connection.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/pool.js:443 :61) at Connection.emit (events.js:311:20) at Connection.EventEmitter.emit (domain.js:482:12) at processMessage (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/connection.js:364:1 0) at Socket.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/connection.js:5 33:15) at Socket.emit (events.js:311:20) at Socket.EventEmitter.emit (domain.js:482:12) at addChunk (_stream_readable.js:294:12) at readableAddChunk (_stream_readable.js:275:11) at Socket.Readable.push (_stream_readable.js:209:10) at TCP.onStreamRead (internal/stream_base_commons.js:186:23) { operationTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: xx }, ok: 0, errmsg: 'cannot add session into the cache', code: 261, codeName: 'TooManyLogicalSessions', '$clusterTime': { clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: xx }, signature: { hash: [Binary], keyId: 0 } }, name: 'MongoError', [Symbol(mongoErrorContextSymbol)]: {} }
ドキュメントを見ると以下のように記載がありメモリ上に保持されているセッション数を示しています。
logicalSessionRecordCache.activeSessionsCount
The number of all active local sessions cached in memory by the mongod or mongos instance since the last refresh period.
再起動後はactiveSessionsCountが1となり、エラーは解消しました。
rs0:PRIMARY> db.serverStatus().logicalSessionRecordCache { "activeSessionsCount" : 1, "sessionsCollectionJobCount" : 1, "lastSessionsCollectionJobDurationMillis" : 0, "lastSessionsCollectionJobTimestamp" : ISODate("xx"), "lastSessionsCollectionJobEntriesRefreshed" : 0, "lastSessionsCollectionJobEntriesEnded" : 0, "lastSessionsCollectionJobCursorsClosed" : 0, "transactionReaperJobCount" : 1, "lastTransactionReaperJobDurationMillis" : 1, "lastTransactionReaperJobTimestamp" : ISODate("xx"), "lastTransactionReaperJobEntriesCleanedUp" : 0 }
以上、ご参考になれば幸いです。