2013-02-05 23 views
5

Theo dõi máy chủ của tôi, sử dụng bộ nhớ của tôi là leo lên theo thời gian:Node.js rò rỉ bộ nhớ, mặc dù liên tục Heap + RSS kích thước

enter image description here

Sau ~ 4 tuần thời gian hoạt động, nó kết thúc lên làm vấn đề/crashing (mà có ý nghĩa, cho rằng tôi đang ở trên EC2 với m1.large trường hợp => 8GB RAM, và RAM dường như đang tăng lên khoảng 1,5 GB/tuần).

Nếu tôi khởi động lại ứng dụng node.js của mình, việc sử dụng bộ nhớ sẽ đặt lại. Nhưng ... Tôi đang theo dõi sử dụng bộ nhớ của tôi qua process.memoryUsage(), và ngay cả sau khi ~ 1 tuần, tôi nhìn thấy

{"rss":"693 Mb","heapTotal":"120 Mb","heapUsed":"79 Mb"} 

tôi đang thiếu gì? Rõ ràng là rò rỉ nằm trong nút, nhưng quá trình này dường như không nhận thức được nó ...

+0

Bạn đang sử dụng mô-đun cụm nút không? Có lẽ việc sử dụng bộ nhớ được báo cáo thuộc về một trong các tiến trình con. Ngoài ra, bạn đã xác minh quá trình nào sử dụng tất cả bộ nhớ đó bằng cách sử dụng ps/top? Bạn đang sử dụng phiên bản node.js nào? – samitny

+0

Không thể trả lời mà không có mã thực. Nhưng bạn có thể thử https://nodetime.com/ để tìm hiểu về rò rỉ bộ nhớ. Bạn có thể khởi động lại các cụm có kích thước rss cao. Đó là giải pháp rất bẩn. – egiray

Trả lời

1

Bạn có thể thử mô-đun node-memwatch, giúp phát hiện rò rỉ và phân biệt heap trong Nút.

Heap diff sẽ trông tương tự như:

{ 
    "before": { "nodes": 11625, "size_bytes": 1869904, "size": "1.78 mb" }, 
    "after": { "nodes": 21435, "size_bytes": 2119136, "size": "2.02 mb" }, 
    "change": { "size_bytes": 249232, "size": "243.39 kb", "freed_nodes": 197, 
    "allocated_nodes": 10007, 
    "details": [ 
     { "what": "String", 
     "size_bytes": -2120, "size": "-2.07 kb", "+": 3, "-": 62 
     }, 
     { "what": "Array", 
     "size_bytes": 66687, "size": "65.13 kb", "+": 4, "-": 78 
     }, 
     { "what": "LeakingClass", 
     "size_bytes": 239952, "size": "234.33 kb", "+": 9998, "-": 0 
     } 
    ] 
    }