Tôi đã sử dụng express trên node.js đang chạy trên máy chủ heroku cho một dự án đơn giản. Khi tôi bắt đầu sử dụng di tích mới để theo dõi bộ nhớ, tôi nhận thấy một mẫu bộ nhớ bị rò rỉ chậm. Tôi đã xóa tất cả mã tôi đã phát triển và tất cả các mô-đun nút khác và chỉ để lại các mô-đun di chuyển mới và chính nó. Tôi vẫn quan sát rò rỉ bộ nhớ. Tôi đã tự hỏi nếu đây là rò rỉ bộ nhớ express.js. Express.js trên Node.js có bị rò rỉ bộ nhớ không?
Dưới đây là tất cả các trái mã:
require('newrelic');
var express = require('express');
var app = express();
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
app.set('port', process.env.PORT || 3000);
}
app.get('/', function (req, res) {
res.send('The server is up and running!');
});
app.listen(app.get('port'), function() {
console.log('Express server listening on port %d in %s mode', app.get('port'), app.get('env'));
});
Và package.json
{
"name": "memleakdebug",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.11.2",
"newrelic": "^1.16.2"
}
}
UPDATE1: Bây giờ phát triển bộ nhớ thậm chí thông qua giới hạn 512MB Heroku cho tầng miễn phí. Bộ sưu tập rác dường như không hoạt động.
Điều bạn đã thể hiện là tăng mức sử dụng bộ nhớ, không nhất thiết phải rò rỉ. Bạn cần phải kiểm tra những gì xảy ra khi hệ thống được đặt dưới áp lực bộ nhớ. 350MB (điểm cao nhất trong biểu đồ của bạn) không phải là rất nhiều bộ nhớ sử dụng trên các hệ thống hiện đại; V8 có thể không có bận tâm để làm bất kỳ bộ sưu tập rác (chưa). –
Mã ban đầu của tôi đã thực hiện một vài trăm yêu cầu http và nó đã thổi sử dụng bộ nhớ lên đến 1,5 GB. Bạn có thể vui lòng cho tôi một ví dụ đơn giản và giới hạn bộ nhớ mà tôi có thể làm V8 để làm GC không? – user3211198
Cách đơn giản nhất có lẽ là cung cấp ít bộ nhớ hơn. Tôi chắc rằng Heroku cho phép bạn kiểm soát điều đó. –