Có một số công cụ để phát hiện rò rỉ bộ nhớ trong nodej không? Và cho tôi biết về kinh nghiệm của bạn trong việc thử nghiệm các ứng dụng nodejs.Phát hiện rò rỉ bộ nhớ trong nodejs
Trả lời
Các công cụ sau đây sẽ có ích cho việc tìm kiếm lỗ hổng bộ nhớ:
Và đó cũng là một hướng dẫn để giúp bạn tìm rò rỉ bộ nhớ ở đây:
Trong theo dõi xuống một bộ nhớ bị rò rỉ Tôi đã thử nút kiểm tra ở trên.
Kể từ tháng 4 năm 2012, bản cập nhật này không được cập nhật để hoạt động với bản phát hành nút hiện tại v0.6.12 Như vậy tôi đã tìm thấy: https://github.com/c4milo/node-webkit-agent.
Nó có thể hiển thị ảnh chụp nhanh heap cho động cơ V8 mới hơn mà không được trình kiểm tra nút hỗ trợ. Theo thứ tự ngắn tôi đã có thể phát hiện các mô-đun bị rò rỉ (trong trường hợp có thể loggly), tôi hy vọng bạn có thành công tương tự!
Điều này hoạt động khá tốt. Tôi đã sử dụng nút này cho v0.8.x quá –
+1 cho trình kiểm tra nút bị hỏng. – liuyanghejerry
tôi cũng có thể giới thiệu các nguồn sau đây:
tập sau NodeUp, nơi profiling và bộ nhớ bị rò rỉ công cụ phát hiện sẽ được thảo luận:
Điều này ar ticle - Tracking Down Memory Leaks in Node.js – A Node.JS Holiday Season, về cơ bản tổng hợp tất cả các mô-đun và kỹ thuật được biết đến rộng rãi để theo dõi rò rỉ bộ nhớ
- Công cụ Mac OS - Instruments có thể hữu ích để gỡ lỗi mô-đun gốc (C++). Nó không quá phức tạp như các công cụ SmartOS, nhưng rất dễ cài đặt.
Tôi sử dụng công cụ dev dev và tệp heapsnapshot trực tiếp, không phải trình kiểm tra nút hoặc tác nhân nút-webkit.
require()
mô hình heapdump.
Gửi tín hiệu usr2 tới tiến trình nodej đang chạy để nhận tệp heapsnapshot.
Tải tệp heapsnapshot trên tab hồ sơ của công cụ dành cho nhà phát triển Chrome.
Một điều tốt là https://github.com/bnoordhuis/node-heapdump rất đơn giản và bạn có thể xem kết quả trong Chrome (vì động cơ V8 cùng trong trình duyệt javascript và nodejs) và so sánh kích thước đối tượng trong bộ nhớ ở mọi thời điểm mà bạn muốn.
Và một mẹo khác làm thế nào để phát hiện rò rỉ bộ nhớ "manualy" hoặc giúp ngăn chặn nó, là lực lượng thu gom rác ở một số nơi của mã của bạn và xem những gì sẽ xảy ra.
Khởi động ứng dụng của bạn bằng "nút --expose-gc file.js" và bất kỳ nơi nào trong mã bạn có thể sử dụng hàm gc(); để gọi thu gom rác thải.
Tôi đã sử dụng các Memwatch gói NPM:
Hãy xem đến Github repository và NPM source
Về cơ bản gói này sẽ kiểm tra việc sử dụng bộ nhớ heap ngay sau khi thu gom rác thải được thực hiện bởi động cơ V8, và cung cấp cho bạn đường cơ sở về mức sử dụng bộ nhớ thực tế.
Đây là cách tôi sử dụng nó:
var memwatch = require('memwatch');
memwatch.on('leak', function(info) {
console.log('Memwatch leak: ');
console.log(info);
});
memwatch.on('stats', function(stats) {
console.log.message('Memwatch stats: ');
console.log(stats);
});
Từ các tài liệu gốc:
Sự kiện
'stats'
, phát ra thỉnh thoảng, cung cấp cho bạn các dữ liệu mô tả sử dụng đống của bạn và các xu hướng theo thời gian.Sự kiện
'leak'
, được phát ra khi xuất hiện mã của bạn bị rò rỉ bộ nhớ. Nó thường được thực hiện khi kích thước heap liên tục phát triển trong một khoảng thời gian ngắn.
Đồng hồ báo thức cũng cung cấp lớp "HeapDiff" để tính toán trạng thái heap giữa hai ảnh chụp nhanh bạn có thể thực hiện các chức năng của mình.
Có thể là một ý tưởng hay để chạy đồng hồ báo thức trong môi trường sân khấu của bạn, để theo dõi các sự kiện gây ra sự cố.
memwatch đã chết – mateeyow
Bạn cần 'memwatch-next' nó hỗ trợ các cuộc gọi tương tự. –
Phương pháp 1-
Node cho phép chúng ta tự kích hoạt Garbage Collection, và nó là điều đầu tiên mà chúng ta nên làm gì khi cố gắng xác nhận rò rỉ bộ nhớ. Điều này có thể được thực hiện bằng cách chạy Node với cờ --expose-gc (tức là node --expose-gc index.js). Khi nút đang chạy trong chế độ đó, bạn có thể kích hoạt một bộ sưu tập Garbage theo cách lập trình bất cứ lúc nào bằng cách gọi global.gc() từ chương trình của bạn.
Bạn cũng có thể kiểm tra lượng bộ nhớ được sử dụng bởi quy trình của bạn bằng cách gọi process.memoryUsage(). HeapUsed.
Bằng cách kích hoạt thủ công việc thu thập rác và kiểm tra vùng heap được sử dụng, bạn có thể xác định xem bạn có thực sự quan sát rò rỉ bộ nhớ trong chương trình của mình hay không. Tăng trưởng bộ nhớ trở nên rõ ràng hơn khi bạn làm bài kiểm tra này.
Phương pháp 2 - cờ --inspect
3 Heap Dumps Phương pháp
Node của hạ cánh trong phiên bản nút 6. Tính năng này cho phép bạn gỡ lỗi và kiểm tra quá trình nút của bạn từ bên trong DevTools Chrome.
Đơn giản chỉ cần khởi động ứng dụng thông qua các cờ --inspect:
$ node --inspect index.js
Thực hiện theo các URL để thanh tra và điều hướng đến tab nhớ.
DevTools Memory Tab
Đây là những gì chúng tôi sẽ làm:
Hit ứng dụng với autocannon -c 1 -d 60 http://localhost:PORT
[https://www.npmjs.com/package/autocannon]
Chụp đống sau khoảng 10 giây , và một lần nữa sau 30 giây.
So sánh ảnh chụp nhanh heap
Chế độ xem so sánh cho chúng ta biết điều gì đã xảy ra giữa các ảnh chụp nhanh. Bạn có thể thấy một số lượng lớn các đối tượng đã được tạo ra hoặc không được GC thu thập.
Vui lòng đọc các bài viết tuyệt vời này để tìm hiểu thêm.
Họ đã giúp đỡ rất nhiều để tìm & sửa chữa rò rỉ: -
https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/
https://www.nearform.com/blog/self-detect-memory-leak-node/
https://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/
- 1. Phát hiện rò rỉ bộ nhớ
- 2. Phát hiện rò rỉ bộ nhớ node.js/javascript trong mã
- 3. Phát hiện rò rỉ bộ nhớ trong ActionScript-3 Project
- 4. Rò rỉ bộ nhớ Phát hiện và ghi đè mới?
- 5. Lỗi "Phát hiện rò rỉ bộ nhớ" lạ C++
- 6. Công cụ phát hiện rò rỉ bộ nhớ
- 7. Rò rỉ bộ nhớ AVAudioPlayer
- 8. Python - Rò rỉ bộ nhớ
- 9. Rò rỉ bộ nhớ CheckedListBox
- 10. rò rỉ bộ nhớ trong Microsoft.FSharp.Control.Mailbox?
- 11. rò rỉ bộ nhớ Python
- 12. Rò rỉ bộ nhớ trong mã webcam
- 13. Phát hiện bộ nhớ tốt, rò rỉ và phát hiện lỗi cho Windows
- 14. Quartz: Rò rỉ bộ nhớ?
- 15. Rò rỉ bộ nhớ SharePoint
- 16. CMSampleBufferRef rò rỉ bộ nhớ
- 17. rò rỉ bộ nhớ CDialog trong VC10
- 18. Ngăn chặn rò rỉ bộ nhớ AJAX
- 19. Rò rỉ bộ nhớ trong Swing
- 20. Rò rỉ bộ nhớ trong .NET
- 21. Phát hiện sơ đồ/rò rỉ VS2010
- 22. Rò rỉ bộ nhớ mỗi lần UIScrollView được phát hành
- 23. C# WPF BitmapSource Bộ nhớ Rò rỉ?
- 24. Rò rỉ bộ nhớ với Serialist Plist
- 25. Rò rỉ bộ nhớ drawInRect trên iOS5.0.1
- 26. iOS - Bộ nhớ bị rò rỉ AddressBook
- 27. SoundPlayer gây ra rò rỉ bộ nhớ?
- 28. rò rỉ bộ nhớ trên Firefox addons
- 29. Rò rỉ bộ nhớ và sự cố đóng cửa trong NodeJS
- 30. Hết bộ nhớ Sự cố rò rỉ bộ nhớ
Tôi đọc blog này và tôi tìm thấy nó hữu ích, http: // dtrace. org/blogs/bmc/2012/05/05/gỡ lỗi-nút-js-memory-leaks/ – tawfekov