Node.js Nodejs express-这是内存泄漏吗?
您好,我是Node的初学者,非常感谢您的帮助 我有一个nodejsexpressapi项目,它会导致随机的高内存使用率。 我使用Node.js Nodejs express-这是内存泄漏吗?,node.js,debugging,memory,memory-leaks,out-of-memory,Node.js,Debugging,Memory,Memory Leaks,Out Of Memory,您好,我是Node的初学者,非常感谢您的帮助 我有一个nodejsexpressapi项目,它会导致随机的高内存使用率。 我使用process.memoryUsage()关注内存消耗堆在30mb到40mb之间保持不变,但一天中有一两次节点服务器崩溃,说Javascript堆内存不足,我不得不手动重新启动它 生产内存使用情况: ["Memory: rss 93.25 MB","Memory: heapTotal 40.68 MB","Memory:
process.memoryUsage()
关注内存消耗堆在30mb到40mb之间保持不变,但一天中有一两次节点服务器崩溃,说Javascript堆内存不足,我不得不手动重新启动它
生产内存使用情况:
["Memory: rss 93.25 MB","Memory: heapTotal 40.68 MB","Memory: heapUsed 30.12 MB","Memory: external 19.47 MB","Memory: arrayBuffers 18 MB"]
简单解释一下我的项目架构,让我知道它是否正确:
index.js
routes.js
api.js(控制器)
现在在我的控制器中,我还有各种全局函数,比如调用一些外部RESTAPI,一些数组计算,一些迭代。那么全局函数是否通过GC自动释放?我还附上了一个堆截图,所有的函数都在泄漏内存吗?
var path = require('path');
var logger = require('morgan');
var express = require('express');
var mongoose = require('mongoose');
var cors = require('cors');
var cookieParser = require('cookie-parser');
var ObjectId = require('mongodb').ObjectID;
const routes = require('./routes/appapiv1/routes');
var app = express();
mongoose.connect('mongodb://localhost:27017/Database', { useUnifiedTopology: true, useNewUrlParser: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
});
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// Make our db accessible to our router
app.use(function (req, res, next) {
req.db = db;
next();
});
app.use(express.static('public', options))
app.use(logger('dev'));
//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));
app.use('/', routes);
app.listen(port);
var express = require('express');
var Api = require('../appapiv1/api');
const router = express.Router();
router.post('/apiOne', Api.functionOne);
router.get('/apiTwo', Api.functionTwo);
router.post('/apiThree', Api.functionThree);
module.exports = router;
var Api = {};
Api.functionOne = function (req, res) {
res.send({ status: 1, data: data });
};
var someFunction = function () {
//doing some work and returing
}
Api.functionTwo = function (req, res) {
var object = someFunction();
res.send({ status: 1, data: data });
};
var someFunctionMore = function () {
//doing some work and returing
}
Api.functionThree = function (req, res) {
var object = someFunction();
res.send({ status: 1, data: data });
};
module.exports = Api;