Cách để hạn chế bao nhiêu RAM một quá trình tùy ý có thể mất?


12

Hãy nói rằng chúng ta có một máy OS X chạy với 4 GB RAM. Có thể thiết lập nó để không có quá trình đơn lẻ nào có thể chiếm hơn 3 GB, do đó, cho dù bộ nhớ có xử lý quá trình như thế nào, vẫn luôn có một số bộ nhớ còn lại để giữ cho hệ thống phản hồi?


6
Không. Và điều này sẽ phản tác dụng. Phân bổ RAM vi mô không phải là thứ mà các hệ điều hành được thiết kế xung quanh. RAM miễn phí là lãng phí RAM. Quá nhiều thứ được tạo ra từ việc quản lý RAM kém của OS X. Đóng hoạt động Giám sát và tiếp tục cuộc sống của bạn dường như là phương thuốc tốt nhất.

8
@cksum Có một loạt các giả định trong bình luận của bạn, hầu hết đều sai. Tôi không cố gắng hỗ trợ quản lý bộ nhớ của OS X. Những gì tôi thực sự đang làm là cố gắng tìm hiểu xem có cách nào để giữ đủ chức năng hệ thống hay không trong khi kiểm tra một số mã dễ biến thành quy trình chạy trốn. Bởi vì RAM miễn phí không lãng phí RAM nếu nó cho phép bạn sửa lỗi.
Fomite

3
Xin lỗi, nhưng nếu câu hỏi của bạn liên quan đến lập trình, (phát triển và thử nghiệm) các ứng dụng, thì nó không có chủ đề cho diễn đàn này. Vui lòng xem Câu hỏi thường gặp để biết thêm thông tin về loại câu hỏi nào ở đây: apple.stackexchange.com/faq

10
FFS, đây không phải là một câu hỏi lập trình. Đó là một câu hỏi hệ điều hành. Giới hạn bộ nhớ mà một quy trình tùy ý có thể sử dụng - Safari, Matlab, Call of Duty, bất cứ điều gì - ở cấp độ hệ điều hành rõ ràng là một câu hỏi của hệ điều hành.
Fomite

7
Là một trang web cho các câu hỏi "Những người đam mê Apple và người dùng quyền lực" mà về bản chất là về bộ nhớ ảo rõ ràng nằm trong giới hạn và về chủ đề. Ngay cả khi sự phát triển có liên quan, điều này sẽ hợp lệ cho các vấn đề điều chỉnh hoặc hiệu suất.
bmike

Câu trả lời:


9

Một câu hỏi tương tự như vậy được ghi chú ở đây Làm thế nào tôi có thể giới hạn dung lượng RAM mà ứng dụng Mac OS có thể sử dụng?

Họ khuyên bạn nên sử dụng lệnh ulimit , nhưng họ không thể giới hạn thành công số lượng họ muốn. Tôi nghĩ vấn đề mà họ gặp phải là thực tế là tùy chọn được đặt -u hoặc -v không chiếm hệ thống phân trang bộ nhớ, ví dụ: bạn chỉ có thể phân bổ dung lượng X cho bạn xử lý trong RAM thực, nhưng chúng tôi có thể trang bạn ra bộ nhớ ảo cả ngày.

Lưu ý rằng điều này có thể nguy hiểm vô hiệu hóa Bộ nhớ ảo, nó có thể dẫn đến việc máy Mac của bạn bị khóa, v.v. khi nó hết RAM.

Hãy thử chạy ulimit với các đối số -l, -m hoặc -v tuy nhiên như đã lưu ý trong trang người dùng ulimit, nó sẽ chạy đến HĐH nếu nó sẽ chú ý đến các cài đặt này hoặc không như đã lưu ý.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [giới hạn]

Sửa đổi giới hạn tài nguyên vỏ.

Cung cấp quyền kiểm soát đối với các tài nguyên có sẵn cho trình bao và các quy trình mà nó tạo ra, trên các hệ thống cho phép kiểm soát như vậy.

Thực sự không thể tìm thấy bất kỳ nguồn xác định nào xác nhận nếu OS X bỏ qua ulimit hay không, nhưng sau khi ulimit được tham chiếu không thành công

Nếu bạn có thể tự mình sử dụng ulimit để đáp ứng nhu cầu của mình thì hãy thử, nếu không kết hợp ulimit và vô hiệu hóa bộ nhớ ảo có thể cho phép bạn thiết lập giới hạn 3 GB cho các quy trình được chọn. FYI ở đây là một liên kết tốt để biết thêm thông tin về Hoàn toàn vô hiệu hóa bộ nhớ ảo trong hệ thống Snow Leopard 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Đây có vẻ là câu trả lời đúng - tôi sẽ dùng thử khi tiếp theo tôi chạy nó. Để bây giờ, chấp nhận câu trả lời.
Fomite

5

Nếu bạn đang chạy Máy chủ Lion (hoặc OSX mới hơn) trên máy Mac của mình, bạn có thể chạy OSX bên trong máy ảo (VirtualBox, Parallels hoặc VMWare, et.al.) trên máy Mac đó. Giới hạn VM ở mức 3GB RAM vật lý và mọi ứng dụng hoặc quy trình bên trong VM cũng sẽ bị hạn chế. Hệ thống lưu trữ VM phải đáp ứng ngay cả khi HĐH trong VM bị sao lưu-trao đổi-đĩa bị giới hạn hoặc gặp sự cố.

Nếu bạn đang gỡ lỗi một quy trình có khả năng chạy trốn, bạn có thể ssh vào VM để chạy trình gỡ lỗi hoặc gỡ lỗi từ dòng lệnh và đăng nhập nội dung cho đến khi mọi thứ bị khóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.