Bạn đang gặp vấn đề về Linux Ate My Ram .
Đừng hoảng sợ.
Đây không phải là vấn đề.
Hệ thống của bạn đang hoạt động như thiết kế.
Vấn đề không phải là hệ điều hành của bạn - vấn đề là sự hiểu biết của bạn về bộ nhớ "miễn phí" là gì.
Các hệ thống Unix sử dụng bộ nhớ cho nhiều hơn là chỉ chạy các chương trình. Bộ nhớ có thể được sử dụng cho:
- Chạy chương trình (hoạt động / sử dụng)
- Dữ liệu đệm trong quá cảnh (bộ đệm)
- Bộ nhớ đệm dữ liệu gần đây được đọc từ / ghi vào đĩa (bộ đệm)
- Hoàn toàn không có gì (miễn phí)
Phần tiếp theo là một chuyến tham quan ngắn (và phần lớn chưa hoàn thành) về cách các hệ thống Unix hiện đại báo cáo việc sử dụng RAM.
Bộ nhớ trống (định nghĩa hệ điều hành) là gì?
Khi một hệ thống Unix báo cáo RAM là Miễn phí, điều đó có nghĩa là "Tôi không sử dụng RAM này cho bất cứ điều gì". RAM
miễn phí thực sự vô giá trị - Nó không làm cho hệ thống của bạn nhanh hơn, nó chỉ ngồi đó là "miễn phí" trong trường hợp có thứ gì đó cần. Rằng một cái gì đó có thể là bất kỳ trong ba mục khác tôi đã đề cập ở trên.
Bộ nhớ cache và bộ đệm là gì?
Bộ nhớ cache và bộ đệm là RAM hệ điều hành đang sử dụng để làm cho hệ thống của bạn nhanh hơn.
Bộ nhớ này không cần thiết để chạy các chương trình ngay bây giờ , vì vậy HĐH của bạn đang sử dụng nó để lưu trữ dữ liệu mà nó cần thường xuyên - ví dụ thư viện C (cần khá nhiều chương trình bạn chạy) hầu như luôn được giữ trong cache
bộ nhớ, vì vậy hệ thống không phải vào đĩa để tìm hướng dẫn cần in "Hello World" trên màn hình.
Nó thực sự phức tạp hơn thế nhiều - có bộ nhớ dùng chung , bộ nhớ có dây , v.v. - nhưng với mục đích của chúng tôi, lời giải thích đơn giản này là đầy đủ.
Bộ nhớ hoạt động là gì?
Bộ nhớ hoạt động là một phần của chúng tôi hiểu là bộ nhớ "đã sử dụng" - RAM mà các ứng dụng đang sử dụng cho bất cứ thứ gì chúng làm - sắp xếp bảng tính, phục vụ trang web, chỉnh sửa đồ họa, v.v.
Bộ nhớ "Hoạt động" gần đây đã "hoạt động" - - chương trình tuyên bố rằng nó đã sử dụng nội dung của nó (đọc hoặc viết) và nó không được coi là một ứng cử viên tốt để trao đổi.
Bộ nhớ không hoạt động là gì?
Giống như Bộ nhớ hoạt động, Bộ nhớ không hoạt động là RAM mà các ứng dụng đang sử dụng cho bất cứ điều gì chúng làm. Sự khác biệt là bộ nhớ này đã không được truy cập trong một thời gian, vì vậy nếu đẩy mạnh hệ điều hành nghĩ rằng nó có thể được trao đổi vào đĩa và (với một chút may mắn) chương trình tuyên bố rằng nó sẽ không yêu cầu lại vì vậy nó sẽ không bao giờ để ý
Bộ nhớ "Được sử dụng" là gì (định nghĩa CON NGƯỜI)
Những gì bạn và tôi nghĩ về bộ nhớ "Được sử dụng" về cơ bản là tổng của bộ nhớ Hoạt động và Không hoạt động. Tất cả các RAM hiện được yêu cầu bởi các ứng dụng cho việc sử dụng của họ.
Miễn là bạn có nhiều RAM được cài đặt hơn tổng bộ nhớ Hoạt động và Không hoạt động (cộng với giới hạn an toàn tốt là 512-1024 MB trên cùng), bạn đang ở một vị trí ổn: Hệ điều hành của bạn có thể sẽ không đạt được hiệu suất trao đổi và giết chết .
Bộ nhớ "Miễn phí" (định nghĩa CON NGƯỜI) là gì?
Những gì bạn và tôi nghĩ về bộ nhớ "miễn phí" là bộ nhớ có sẵn để chạy các chương trình.
Điều này hơi phức tạp hơn so với con số "Miễn phí" trong các báo cáo hệ điều hành của bạn. Khi một chương trình yêu cầu RAM, hệ điều hành sẽ cố gắng lấy RAM đó theo cách ít gây gián đoạn nhất có thể:
- Nếu có sẵn Bộ nhớ trống (ngồi xung quanh không làm gì) thì RAM sẽ được phân bổ.
- Nếu không có bộ nhớ trống, hệ điều hành sẽ hủy bỏ không gian Bộ đệm và Bộ đệm: Các nội dung ít được truy cập gần đây nhất / ít thường xuyên nhất trong nhóm bộ đệm sẽ bị loại bỏ và RAM được cung cấp cho chương trình.
- Nếu không có Bộ đệm / Bộ nhớ cache để hủy bộ đệm, bộ trao đổi sẽ xem xét bộ nhớ không hoạt động và chọn các khu vực mà nó cho rằng ít có khả năng được truy cập nhất. Dữ liệu đó sẽ được phân trang để trao đổi (đĩa) và RAM mới được giải phóng được cung cấp cho chương trình.
- Nếu tất cả RAM không hoạt động đã bị tráo đổi, bộ trao đổi sẽ bắt đầu đưa Active RAM vào đĩa.
(Đây là về nơi thực hiện thường đi đến những con chó: Mỗi khi một chương trình được lần lượt của nó trên CPU của nó bit hoán đổi ra cần phải được đưa trở lại vào RAM, có nghĩa là bộ nhớ kích hoạt một số chương trình khác phải được tháo ra - các doanh thu cao trong trao đổi được gọi là đập )
- Nếu hệ thống đã hoán đổi mọi thứ có thể (và lấp đầy phân vùng trao đổi) hoặc nếu bạn đang chạy một hệ thống không có phân vùng trao đổi, điều tồi tệ sẽ xảy ra. Tại thời điểm này, một trong hai điều sẽ xảy ra:
malloc()
sẽ thất bại. Đây là hành vi tuân thủ POSIX - hệ điều hành sẽ thông báo cho chương trình yêu cầu RAM rằng nó không thể đáp ứng yêu cầu.
Chương trình có thể yêu cầu ít RAM hơn hoặc nếu không thể thực hiện với một phần bộ nhớ nhỏ hơn, nó có thể dọn sạch và thoát ra. (Nếu chương trình được viết xấu, nó sẽ bị sập.)
- Nếu bạn đang sử dụng hộp Linux, OOM-Killer có thể lái xe theo kiểu băng đảng - bằng cách giết người, kết thúc các quá trình khác để cố gắng giải phóng đủ RAM để đáp ứng yêu cầu.
Trong trường hợp bạn không thể nói theo mô tả của tôi ở đây và câu trả lời của tôi cho câu hỏi được liên kết, tôi nghĩ đây là một cách khủng khiếp để giải quyết vấn đề.
Tại sao RAM miễn phí tăng khi bạn xóa tệp?
Trong ví dụ từ câu hỏi ở đây, bạn nhận thấy rằng có thể "Giải phóng" RAM bằng cách xóa tệp sao lưu - giải thích cho điều đó khá đơn giản: Vì không có gì sử dụng tệp đó (không xử lý tệp mở) và không thể truy cập được từ đó hệ thống tập tin (không liên kết) hệ điều hành biết rằng sẽ không có ai truy cập lại dữ liệu đó và nó sẽ xóa dữ liệu khỏi bộ đệm của hệ thống tập tin.
Điều này làm cho hệ điều hành báo cáo Bộ nhớ trống nhiều hơn, nhưng không ảnh hưởng đến hiệu năng hệ thống.