2012-05-25 17 views
6

Tôi đang làm việc trong một môi trường nhúng, nơi các nguồn lực là khá hạn chế. Chúng tôi đang cố gắng sử dụng Node.js, mà hoạt động tốt, nhưng thường tiêu thụ khoảng 60 MB bộ nhớ ảo (. Bộ nhớ thực sử dụng là khoảng 5 MB) Với những hạn chế của chúng tôi, đây là quá nhiều bộ nhớ ảo; chúng tôi chỉ có thể đủ khả năng cho phép node.js sử dụng khoảng 30 megabyte máy ảo, nhiều nhất.Làm thế nào để hạn chế sử dụng bộ nhớ ảo bởi node.js?

Có một số tùy chọn dòng lệnh cho Node.js, chẳng hạn như "--max_old_space_size", "--max_executable_size", và "--max_new_space_size", nhưng sau khi thử nghiệm, tôi thấy rằng các bài kiểm soát bộ nhớ thực sử dụng, không phải kích thước bộ nhớ ảo tối đa.

Nếu vấn đề, tôi đang làm việc trong một biến thể ubuntu linux trên kiến ​​trúc ARM.

Có bất kỳ tùy chọn hoặc thiết lập này sẽ cho phép một để đặt số tiền tối đa của bộ nhớ ảo rằng một quá trình Node.js được phép sử dụng không?

+0

Tại sao mà phải là một vấn đề? Linux sử dụng phân bổ quá mức: Bộ nhớ ảo này sẽ chỉ tồn tại dưới dạng các mục nhập bên trong bảng trang quy trình cho đến khi nó được * acutually * sử dụng. –

+0

Hm. Tôi không chắc. Đây là một môi trường nhúng (có nghĩa là: không có không gian đĩa) vì vậy sẽ không phải tất cả các phân bổ ảo sử dụng hết một số bộ nhớ thực? Tôi sẽ đặt tư tưởng đó cho sếp của tôi, nhưng tôi có cảm giác rằng nó sẽ không tạo ra bất kỳ sự khác biệt nào; Tôi đã được lệnh phải giảm bớt dấu chân và tranh luận rằng tôi không cần phải không mang theo nhiều cân. Các 'khách hàng luôn luôn đúng' loại điều. Bên cạnh đó, tôi đã gặp phải một vấn đề khác; Tôi đã viết một hàm bằng cách sử dụng setrlimit() để hạn chế sử dụng bộ nhớ ảo nhỏ hơn 55 megs, và bây giờ node.js thoát với một lỗi malloc. Bất kỳ đề xuất? – Mike

+0

Xin chào Mike. Làm thế nào bạn giải quyết được điều này? – Industrial

Trả lời

1

Bạn có thể sử dụng để thực hiện softlimit nút với kích thước hạn chế. Hoặc bạn có thể trực tiếp sử dụng setrlimit của Linux, nhưng không thực sự chắc chắn làm thế nào để gọi nó từ NodeJS, xem this SO question

+0

Cảm ơn. Tôi đã tìm thấy setrlimit(), sử dụng nó để viết một plugin cho node.js, và nó hoạt động - nhưng bây giờ tôi nhận được một thông báo lỗi từ node.js rằng malloc() không thành công vì nó không thể cấp phát bộ nhớ nhiều (55 megs) theo ý muốn. Một cách rất vô lý để xử lý một thiếu bộ nhớ, nó sẽ có vẻ. Vì vậy, bây giờ tôi đang cố gắng tìm ra nếu tôi có thể xây dựng lại node.js và để lại một cái gì đó để giảm bớt dấu chân bộ nhớ. Bất kỳ ý tưởng? – Mike