2012-10-16 22 views
8

Nodejs: 0.8.8Node.js - có thể bộ nhớ máy chủ http rò rỉ phiên bản

Đây là máy chủ:

var http = require('http'); 
var port = 1338; 
var ip = "127.0.0.1";  

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hi there\n'); 
}).listen(port, ip);  

Khách hàng (php script) cong đi một yêu cầu đường bưu điện đến máy chủ trên. POST là một chuỗi (json), có kích thước khoảng 4 megabyte.

Như bạn có thể thấy, máy chủ không làm gì với dữ liệu đã đăng. Để gỡ lỗi, tôi đã xóa tất cả mã của mình và quay lại ví dụ thế giới hello không có gì :)
Khi tôi xem xét việc sử dụng bộ nhớ của quá trình nút (được thực hiện trong Trình giám sát hoạt động, ứng dụng mac) - báo cáo rằng việc sử dụng bộ nhớ máy chủ nút đang nhận được lớn hơn cho mọi yêu cầu.
Vì vậy, sau 20 yêu cầu hoặc để sử dụng bộ nhớ được tăng gấp đôi.

+4

Tôi sẽ hỏi câu hỏi 1000 đô la: liệu node.js cuối cùng có hog tất cả bộ nhớ và sự cố hay việc sử dụng bộ nhớ cuối cùng sẽ giảm xuống mức thấp? – jsalonen

Trả lời

19

Đây không phải là lỗi. Đó là hành vi bình thường, mong đợi.

Node.js dựa trên JavaScript, là ngôn ngữ thu thập rác. Tóm lại, điều gì xảy ra, là bộ nhớ không được giải phóng ngay lập tức, nhưng thay vào đó sẽ mất một thời gian cho đến khi bộ nhớ được giải phóng (ví dụ như rác được thu thập). V8 (mà nút sử dụng) thực sự có a very intelligent garbage collector rằng "đảm bảo phân bổ đối tượng nhanh, tạm dừng thu gom rác ngắn và không phân mảnh bộ nhớ".

Để minh họa hành vi này cho bạn, tôi đã chạy tập lệnh ở trên với node.js 0.8.8 trên Windows và đã kích hoạt máy chủ bằng các yêu cầu HTTP POST lớn.

Process Explorer cho thấy đồ thị sử dụng bộ nhớ sau:

enter image description here

Như bạn có thể thấy, việc sử dụng bộ nhớ tăng lên, cho đến khi một giới hạn nhất định mà gây nên thu gom rác thải. Sau khi dọn dẹp, việc sử dụng được đặt lại và bắt đầu lại cho đến khi kích hoạt tiếp theo.

+2

Trong các thử nghiệm ban đầu của tôi, tôi đã thực hiện khoảng 20 yêu cầu và bộ nhớ chỉ tiếp tục tăng lên. Bây giờ sau khi đọc câu trả lời rất thông tin của bạn, tôi đã tiếp tục yêu cầu và sau khoảng 30 hoặc hơn, gc đã đá vào :) – ado

+0

+1 cho biểu đồ thông tin - cảm ơn bạn – zupa

+0

@jsalonen có thể giới hạn GC để điều chỉnh không? – Sir