Node.js Nodejs代码崩溃Mongodb服务器
我在mongodb的一个收藏中有大约30万个文档,这些文档都放在AWS中。当我查询这个特定的路由(thing2)时,似乎mongo处理的太多了,所以mongod服务崩溃了。我已经给我的代码增加了一个限制,但它仍然不起作用。理想情况下,我希望能够搜索特定的关键字,但这部分已经被注释掉了Node.js Nodejs代码崩溃Mongodb服务器,node.js,mongodb,amazon-web-services,Node.js,Mongodb,Amazon Web Services,我在mongodb的一个收藏中有大约30万个文档,这些文档都放在AWS中。当我查询这个特定的路由(thing2)时,似乎mongo处理的太多了,所以mongod服务崩溃了。我已经给我的代码增加了一个限制,但它仍然不起作用。理想情况下,我希望能够搜索特定的关键字,但这部分已经被注释掉了 var express = require('express') var app = express() app.get('/', function (req, res) { res.send('Hell
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
});
app.get('/thing2', function(req, res) {
var username = req.query.username
var keyword = req.query.keyword
var MongoClient = require('mongodb').MongoClient,
assert = require('assert');
var url = 'mongodb://localhost:27017/my_db';
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var collection = db.collection('my_collection');
/ * collection.find({ $and: [
* {"text" : {$regex : ".*"+keyword+".*"}},
* {"username" : username}
* ] }).limit(5).toArray(function(err, docs) {
*/
collection.find({"user.screen_name" : username}).limit(1).toArray(function(err, docs) {
console.log("\n" + new Date().toLocaleString() + " " + username);
if (!err) {
console.log(docs.length)
} else {
console.log(err)
}
res.send(docs)
});
});
});
app.listen(80, function () {
console.log('Listening on port 80!')
});
我在控制台中看到的错误是:
{ [MongoError: connection 0 to localhost:27017 closed]
name: 'MongoError',
message: 'connection 0 to localhost:27017 closed' }
编辑:mongo日志
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.471+0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongodb/diagnostic.data'
2017-04-19T03:59:03.471+0000 I NETWORK [initandlisten] waiting for connections on port 27017
2017-04-19T03:59:03.471+0000 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2017-04-19T03:59:04.003+0000 I FTDC [ftdc] Unclean full-time diagnostic data capture shutdown detected, found interim file, some metrics may have been lost. OK
2017-04-19T03:59:23.504+0000 I COMMAND [ftdc] serverStatus was very slow: { after basic: 40, after asserts: 110, after connections: 130, after extra_info: 160, after globalLock: 310, after locks: 540, after network: 630, after opcounters: 760, after opcountersRepl: 870, after storageEngine: 1120, after tcmalloc: 1540, after wiredTiger: 2690, at end: 3370 }
问题是你连接得太频繁了。我会使用mongoose重新编写代码:
var express = require('express')
var app = express()
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db')
var collection = require('user');
app.get('/', function (req, res) {
res.send('Hello World!')
});
app.get('/thing2', function(req, res) {
var username = req.query.username
var keyword = req.query.keyword
collection.find({"user.screen_name" : username}).limit(1).toArray(function(err, docs) {
console.log("\n" + new Date().toLocaleString() + " " + username);
if (!err) {
console.log(docs.length)
} else {
console.log(err)
}
res.send(docs)
});
});
app.listen(80, function () {
console.log('Listening on port 80!')
});
您可以像这样对mongoose模式建模(文件名为:“user.js”):
尽量使其工作最小,然后增加与您真正的模型。
希望我的回答是有帮助的您不需要(不应该)在有请求时一直连接。您可以在开始时连接一次,然后在整个应用程序中继续使用此连接。@israel.zing那么我如何修复此问题?当服务崩溃时,mongo日志会说什么?你是在玩nano吗?Mongo很结实normally@Matt如何找到mongo日志?我在t2.micro(免费层)
sudoless/var/log/mongodb/mongod.log
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
name: String,
userId : Number
});
module.exports = mongoose.model('User', UserSchema);