Bối cảnh: Tôi đến từ thế giới của Microsoft, trong đó tôi đã từng có các trang web được lưu trữ trên IIS. Kinh nghiệm đã dạy tôi để tái chế hồ bơi ứng dụng của tôi một lần một ngày để loại bỏ các vấn đề lạ do sự phân mảnh. Tái chế nhóm ứng dụng về cơ bản có nghĩa là khởi động lại ứng dụng của bạn mà không cần khởi động lại toàn bộ IIS. Tôi cũng đã xem một bài giảng giải thích cách Microsoft đã giảm phân mảnh rất nhiều trong .Net 4.5.Node.js và phân mảnh
Bây giờ, tôi đang triển khai một ứng dụng Node.js vào môi trường sản xuất và tôi phải đảm bảo rằng nó hoạt động hoàn hảo mọi lúc. Ban đầu tôi nghĩ để làm cho ứng dụng của tôi khởi động lại một lần một ngày. Sau đó, tôi đã thực hiện một số nghiên cứu để tìm ra một số manh mối về các vấn đề phân mảnh trong Node.js. Điều duy nhất tôi đã tìm thấy là một mảnh đoạn từ an article describing GC in V8:
Để đảm bảo phân bổ nhanh đối tượng, tạm dừng thu gom rác thải ngắn, và “không phân mảnh bộ nhớ V8” sử dụng một stop-the-thế giới, thế hệ, chính xác, thu gom rác thải.
Tuyên bố này thực sự không đủ để tôi từ bỏ việc xây dựng cơ chế khởi động lại cho ứng dụng của mình, nhưng mặt khác tôi không muốn thực hiện một số công việc nếu không có sự cố.
Vì vậy quesion của tôi là:
Nên hay không nên tôi khởi động lại ứng dụng của tôi tất cả bây giờ và sau đó để ngăn chặn sự phân mảnh?
phải rõ ràng, bạn nên khởi động lại máy chủ VỚI theo dõi, phải không? Tôi có trải nghiệm xấu với các ứng dụng khởi động lại ở cấp cao hơn có vấn đề mà không có bất kỳ loại thông tin nào về lý do tại sao họ có những vấn đề này để nó vẫn là trò chơi đoán. –
@CorvusCrypto Tôi khuyên bạn nên theo dõi trước. Và sau đó quyết định xem có cần khởi động lại máy chủ hay không. – Parris
Cảm ơn bạn đã trả lời chi tiết. Tôi có hai câu hỏi: 1. Làm thế nào có thể rò rỉ bộ nhớ xảy ra trong một ngôn ngữ mã được quản lý? Afaik rò rỉ bộ nhớ xảy ra khi bạn không phát hành phân bổ bộ nhớ mà bạn không sử dụng nữa; nhưng trong một ứng dụng mã được quản lý, mọi đối tượng bạn không có tham chiếu đến nữa đều được GC giải phóng. (Câu hỏi thứ 2 nằm trong bình luận tiếp theo). – Alon