Tại sao Red Hat Linux báo cáo bộ nhớ trống ít hơn trên hệ thống so với thực tế có sẵn?


9

Tôi có một máy chủ Red Hat Linux tại nhà tương đối nhỏ (RAM khoảng 8 GB). Tôi không sử dụng nó cho nhiều mục đích khác ngoài việc chạy một số ứng dụng được trồng tại nhà để theo dõi nhiều thứ khác nhau. Những thứ thực sự duy nhất chạy trên hộp là cơ sở dữ liệu và máy chủ web.

Tôi đã nhận thấy rằng khi kiểm tra các bộ đếm hệ thống bằng các công cụ như NMON và TOP thì tổng bộ nhớ trống của hệ thống tương đối thấp (theo thứ tự vài trăm MB), trong khi bộ nhớ hoạt động cho cơ sở dữ liệu và máy chủ web vẫn còn thấp (chỉ tiêu thụ 3 GB kết hợp). Ngay cả khi bao gồm tất cả các quá trình đang chạy khác, tổng bộ nhớ đã tiêu thụ ít hơn 4 GB.

Tại sao Red Hat Linux báo cáo bộ nhớ trống ít hơn tổng bộ nhớ trừ tổng bộ nhớ đã sử dụng của các tiến trình đang chạy?

Câu trả lời:


19

Đừng nhầm lẫn bộ nhớ trống với bộ nhớ không sử dụng. Bộ nhớ trống, trong thế giới unix là một trang của bộ nhớ vật lý không có dữ liệu logic được ánh xạ tới nó. Bộ nhớ chưa sử dụng không có một số dữ liệu ánh xạ tới nó, nhưng nó hiện không có trong hoạt động sử dụng bởi một quá trình chạy.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (và tất cả các hệ điều hành Unix) cố gắng có ít bộ nhớ trống nhất có thể. Thay vào đó, họ sử dụng bộ nhớ không được ánh xạ tích cực vào các quy trình trong HĐH đang chạy cho những thứ như bộ đệm và bộ đệm cho các hoạt động chuyển IO khác nhau.

Một điều khác có thể làm bạn bối rối là bạn không thể đơn giản thêm bộ nhớ đang sử dụng bởi tất cả các quy trình đang chạy để có được tổng bộ nhớ trong hình. Nếu bạn đã thử điều này, bạn sẽ nhanh chóng phát hiện ra rằng các ứng dụng của bạn dường như đang sử dụng nhiều bộ nhớ hơn thực tế tồn tại trên máy. Đây là vì hai lý do

  1. Bộ nhớ có thể được chia sẻ giữa các quá trình khác nhau, thông qua cấp phát bộ nhớ Copy-On-Write , bộ nhớ được ánh xạ IOcác thư viện động được chia sẻ .
  2. Hệ điều hành có thể tự do hứa hẹn nhiều bộ nhớ hơn cho ứng dụng so với thực tế nó đã cung cấp. Lý thuyết cho rằng hầu hết các nhà văn ứng dụng thích yêu cầu số lượng lớn bộ nhớ trong một lần, để tránh chi phí hoạt động và có thể không thực sự sử dụng tất cả bộ nhớ đó.

Có một bài viết gần đây trên lwn.net thảo luận về vấn đề này .


1
Một lời giải thích đơn giản cũng được cung cấp tại đây: linuxHRyram.com
Steven T. Snyder

4

Linux sẽ chủ động lưu trữ bộ nhớ truy cập hệ thống tệp vào bộ nhớ để cho thời gian truy cập đĩa nhanh hơn. Nó không có gì phải lo lắng.

Chạy miễn phí -m trên hộp sẽ cho bạn ý tưởng tốt hơn về nơi bộ nhớ đang được sử dụng.

Dưới đây là đầu ra được kéo từ một trong các hộp của tôi. Bộ nhớ trống là 147Meg với bộ nhớ cache gần như 4G cho các yêu cầu truy cập hệ thống tệp.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722

1

Bạn cũng bao gồm các trường "được đệm" và "được lưu trữ"?


1

Với linux, hãy xem Commited_AS trong / Proc / meminfo, đây là dung lượng bộ nhớ (real + exchange) mà kernel đã thực sự hứa để chạy các tiến trình.

Linux sử dụng bộ nhớ rất hiệu quả, bất kỳ khối nào không được hứa hẹn cho một số quy trình đều được sử dụng để lưu trữ các tệp được truy cập gần đây / thường xuyên. Vì vậy, điển hình là Linux sử dụng 90% tất cả bộ nhớ vật lý khả dụng không lâu sau khi khởi động.

Nhìn vào những gì hạt nhân đã cam kết cung cấp .. và sử dụng (trao đổi) bẩn, điều này mang lại cho bạn một bức tranh tổng thể tốt hơn.

Nếu bạn cần điều chỉnh hành vi này, vui lòng cập nhật câu hỏi của bạn :)

Đây là MO tiêu chuẩn cho Linux .. một số distro điều chỉnh quản lý bộ nhớ cho phù hợp với nhu cầu của họ thông qua sysctl. Tuy nhiên, những gì bạn báo cáo là khá điển hình trong số tất cả.


1

Loại kernel nào bạn đang chạy trên hệ thống? Nhân 32 bit sẽ chỉ báo cáo khoảng 3,6 GB bộ nhớ, trừ khi được biên dịch với bật PAE.

Nói rằng, nếu đây là phiên bản hiện đại của Redhat Enterprise Linux (hoặc CentOS) - v3 trở đi - hạt nhân 32 bit mặc định sẽ kích hoạt tính năng này.

Nếu bạn có thể đăng đầu ra của lệnh 'miễn phí' được nêu chi tiết ở trên, chúng tôi sẽ có thể xem liệu đây có phải là sự cố hay không.

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.