2014-12-17 13 views
6

Tôi đang viết tập lệnh shell cần biết tổng số bộ nhớ sẵn có (miễn phí + có thể khôi phục) trong hệ thống. Đối với điều này tôi phân tích cú pháp đầu ra của lệnh free. Sản lượng tiêu biểu của free là như sau:Tổng dung lượng bộ nhớ khả dụng cho các ứng dụng trong Linux

$ free -m 
      total  used  free  shared buffers  cached 
Mem:   2488  965  1523   0   83  517 
-/+ buffers/cache:  363  2124 
Swap:   1565   0  1565 

Người ta thường cho rằng các cột "tự do", điều chỉnh bởi bộ đệm và bộ nhớ cache, đại diện cho bộ nhớ đó là miễn phí hoặc có thể khai phá, do đó có sẵn cho các ứng dụng. Vì vậy, trong ví dụ trên chúng ta sẽ có khoảng 2124 MB.

Tuy nhiên điều này là không đúng nếu tmpfs đang được sử dụng, như bất kỳ bộ nhớ được sử dụng bởi tmpfs được bao gồm trong "cache", tuy nhiên bộ nhớ này là không có thể khai phá (biết thêm trong this article)

thế nào thì chúng ta có thể tìm ra số lượng bộ nhớ thực sự có sẵn?

+0

Sử dụng '/ proc/meminfo' và tài khoản cho' Shmem' theo cách thủ công? –

+0

Bạn có thể nhận được câu trả lời tốt hơn trên http://unix.stackexchange.com/ –

+0

@EtanReisner Phân tích cú pháp/proc/meminfo sẽ ổn nhưng Shmem là điều duy nhất tôi cần quan tâm? – Grodriguez

Trả lời

0

Dường như nhận được lượng bộ nhớ khả dụng không dễ dàng như "bộ đệm + bộ nhớ đệm + lưu trữ miễn phí". Để giải quyết vấn đề này, Linux kernel 3.14 đã giới thiệu một số liệu mới được gọi là "MemAvailable" mà phải mất nhiều yếu tố vào tài khoản:

Hiện nay, dung lượng bộ nhớ có sẵn cho một khối lượng công việc mới, mà không đẩy hệ thống vào trao đổi, có thể được ước tính từ MemFree, Hoạt động (tệp), Không hoạt động (tệp) và SReclaimable, cũng như "water" "thấp" từ/proc/zoneinfo.

Thông tin khác có thể tìm thấy in the kernel commit message.

Đối với hạt nhân cũ hơn 3,14, there are tools có thể mô phỏng số liệu này theo cách giống như hạt nhân tính.

Các vấn đề liên quan