Làm cách nào để lấy bộ nhớ đã sử dụng (RAM đã sử dụng) bằng lệnh Linux?


30

Tôi đang cố gắng truy xuất bộ nhớ được sử dụng (RAM) theo tỷ lệ phần trăm bằng các lệnh Linux. Cpanel của tôi hiển thị Bộ nhớ được sử dụng mà tôi cần hiển thị trên một trang web cụ thể.

Từ các diễn đàn, tôi phát hiện ra rằng bộ nhớ chính xác có thể được tìm thấy sau đây:

free -m

Kết quả:

-/+ buffers/cache:        492       1555

- / + bộ đệm / bộ đệm: chứa cách sử dụng bộ nhớ chính xác. Tôi không biết cách phân tích thông tin này hoặc nếu có bất kỳ lệnh nào khác để lấy bộ nhớ được sử dụng theo tỷ lệ phần trăm.


3
Điều đó đã được trả lời ở đây rồi! stackoverflow.com/questions/10585978/ từ ví dụ: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher

@szboardstretcher Tôi thích cái này:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me

Không biết bạn cần số gì cho nó, thật khó để nói cho bạn biết bạn nên sử dụng số nào. Tuy nhiên, trong nhiều trường hợp, bất kỳ con số nào trong số đó chỉ là rất ngây thơ và đòi hỏi thông tin về xu hướng và bối cảnh.
eckes

Câu trả lời:


33

Đây là đầu ra mẫu từ miễn phí:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

Dòng đầu tiên của Mem:danh sách số ( )

  • total ký ức
  • used ký ức
  • free ký ức
  • sử dụng shared
  • sử dụng buffers
  • sử dụng cache hệ thống tập tin ( cached)

Trong dòng này used bao gồm bộ đệm và bộ đệm và điều này tác động miễn phí. Đây không phải là bộ nhớ trống "thật" của bạn vì hệ thống sẽ kết xuất bộ đệm nếu cần để đáp ứng yêu cầu phân bổ.

Dòng tiếp theo ( -/+ buffers/cache:) cung cấp cho chúng ta bộ nhớ thực và sử dụng thực tế như thể không có bộ đệm hoặc bộ đệm.

Dòng cuối cùng ( Swap) cung cấp cho việc sử dụng bộ nhớ trao đổi. Không có bộ đệm hoặc bộ đệm để trao đổi vì sẽ không có ý nghĩa khi đặt những thứ này vào đĩa vật lý.

Để xuất bộ nhớ đã sử dụng (trừ bộ đệm và bộ đệm), bạn có thể sử dụng một lệnh như:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Điều này lấy dòng thứ ba và chia được sử dụng / tổng * 100.

Và cho bộ nhớ miễn phí:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

1
Là "- / + bộ đệm / bộ đệm: 5779440 18904464" có đúng cách sử dụng / trạng thái RAM của máy chủ không?
codelogn

2
Nói đúng, không, nhưng thực tế nói, có. Việc sử dụng bộ nhớ thực tế là dòng thứ 2 (được sử dụng: 20746840) nhưng một phần của việc sử dụng bộ nhớ đó là bộ đệm và bộ đệm chỉ để tăng tốc thời gian phản hồi trên hệ thống của bạn. Dòng thứ ba (được sử dụng: 5779440) cung cấp cho bạn dung lượng bộ nhớ thực sự được sử dụng bởi các chương trình và chính con số bộ nhớ này sẽ quyết định số lượng chương trình của bạn có thể phân bổ thêm bao nhiêu. Nếu mục tiêu của bạn là có được bộ nhớ trống / đã sử dụng theo nghĩa các chương trình đang thực sự sử dụng và những gì bạn thực sự có thể phân bổ, thì có, dòng 3 là chính xác cho bạn.
casey

1
Lưu ý rằng với các phiên bản gần đây hơn free, -/+ buffers/cachehoàn toàn bị bỏ qua một cách có chủ ý và giá trị được hiển thị trong usedcột hiện không bao gồm bộ đệm và bộ đệm theo mặc định. Xem tại đây: bugzilla.redhat.com/show_orms.cgi?id=1158828
jdgregson

10

Tôi sẽ đề cập đến cách phân tích thông tin về freelệnh. Để tìm tỷ lệ phần trăm, bạn có thể sử dụng như được đề xuất trong 2 câu trả lời khác.

Điều này được giải thích rõ ràng ở đây . Tôi sẽ cố gắng giải thích từ những gì tôi có trong hệ thống của mình.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Bây giờ, chúng ta hãy xem những con số khác nhau thực sự đại diện.

Dòng 1

  • 7869 Cho biết bộ nhớ / RAM vật lý khả dụng cho máy của tôi.
  • 4402 Cho biết bộ nhớ / RAM được sử dụng bởi hệ thống của tôi.
  • 3466 Cho biết Tổng RAM miễn phí và có sẵn cho quy trình mới để chạy.
  • 0 Cho biết bộ nhớ dùng chung. Cột này đã lỗi thời và có thể bị xóa trong các bản phát hành miễn phí trong tương lai.
  • 208 Cho biết tổng RAM được đệm bởi các ứng dụng khác nhau trong Linux.
  • 3497 Cho biết tổng RAM được sử dụng để lưu dữ liệu cho mục đích tương lai.

Dòng 2

-/+ buffers/cache:        696       7173

Làm cách nào để tính các giá trị 696 và 7173 thu được trong Line2?

Tổng số được sử dụng ( 4402 ) - Tổng bộ đệm RAM ( 208 ) - Tổng RAM cho bộ nhớ đệm ( 3497 ) sẽ tạo thành RAM được sử dụng thực tế trong hệ thống. Nó trả về cho tôi 697 , đây là đầu ra RAM được sử dụng thực tế trong dòng thứ hai.

Bây giờ, Tổng số khả dụng ( 7869 ) - Được sử dụng thực tế ( 696 ) sẽ cung cấp cho bạn bộ nhớ trống7173 trong trường hợp này cũng được nhận làm đầu ra trong dòng thứ hai.


6

Mặc dù trùng lặp như được chỉ ra bởi @szboardstretcher, nhưng sở thích của tôi từ các giải pháp (trong câu hỏi ban đầu) là cái bên dưới, đặc biệt vì bạn muốn phân tích cú pháp đến một trang web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Đầu ra:

used: 82.68%, buffers: 42.81%, swap: 1.27%

4
FYI Tôi nhận được những điều sau bằng cách sử dụng nàyused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

Lệnh đầy đủ được sử dụng là gì? Tôi đã kiểm tra nó bằng centos.
Simply_Me

Xin lỗi vì định dạng nhưng ở đây bạn đi$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj

Đối với một số phiên bản của awk (mawk), ký hiệu phần trăm cần được nhân đôi để in nó, nếu không, awk sẽ đưa ra một lỗi, như thế này: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Điều này hoạt động với cả mawk và gawk.
Ján Lalinský

2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Thêm một dòng mới sau số trao đổi


1

Để tối đa CentOS 7 Bạn có thể thử

cat /proc/meminfo 

để xem việc sử dụng thực sự của bộ nhớ theo các quy trình.

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.