Cái gì đang sử dụng trao đổi của tôi (Ubuntu)?


30

Tôi có một máy chủ Ubuntu 8.04 đang chạy một cơ sở dữ liệu và một loạt các máy chủ ứng dụng Java. Cấu hình và cách sử dụng bộ nhớ của nó là:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Tôi nhận thấy rằng hoán đổi tăng lên mỗi buổi chiều, và được phát hành một thời gian vào ban đêm. Nhu cầu không giống nhau trong tất cả các ngày và bắt đầu vào những thời điểm khác nhau. Vì vậy, nó khá ngẫu nhiên, ngoại trừ ranh giới "buổi chiều" mờ.

Tải trên máy này thay đổi trong ngày. Nó rất thấp trong khoảng từ nửa đêm đến 6-7 giờ sáng, cao hơn nhiều (nhưng ổn định) cho đến 6-8 giờ chiều, sau đó giảm dần.

Bây giờ tôi có các câu hỏi sau:

  1. Làm thế nào tôi có thể thấy các quá trình đang sử dụng trao đổi?
  2. Tại sao nó thích trao đổi hơn là lấy một số bộ nhớ từ bộ đệm?

Câu trả lời:


25

Các mô hình sử dụng trao đổi mà bạn mô tả không có vẻ đáng ngạc nhiên. Chúng phù hợp với một số quy trình chạy vĩnh viễn có các trang hiếm khi được sử dụng. Vào ban ngày, do hoạt động cao, các trang hiếm khi được sử dụng hầu như luôn luôn được trao đổi. Vào ban đêm, có nhiều chỗ hơn cho chúng trong RAM.

Bạn có thể có một cái nhìn thoáng qua về bao nhiêu bộ nhớ của các loại mà mỗi quá trình đang sử dụng trong tophoặc htop. Không hiển thị sử dụng trao đổi theo mặc định, nhưng cả hai có thể được cấu hình thành (trên cùng: nhấn fvà chuyển đổi trên SWAPcột; htop: nhấn F2, thêm NSWAPcột). Bạn có thể tìm thêm thông tin về một quá trình đặc biệt với cat /proc/12345/vmstatnơi 12345là quá trình ID. Lưu ý rằng, chương trình hoán đổi bao nhiêu mà một chương trình đang sử dụng không hoàn toàn được xác định rõ ràng, vì một số trang được chia sẻ bởi một số quy trình.

Có hai loại đối thủ chính của RAM: bộ nhớ xử lý (có thể hoán đổi) và bộ đệm đĩa (có thể được đọc lại từ một tệp). Không có lý do gì để luôn ưu tiên bộ nhớ xử lý trên bộ đệm đĩa: tốt hơn hết là trao đổi một phần bộ nhớ xử lý hiếm khi được sử dụng hơn là tiếp tục đọc một tệp vào bộ nhớ. Con số bạn đưa ra, với khoảng một nửa (giả sử 30% 70%) bộ nhớ dành cho bộ nhớ đĩa, là điển hình cho các hệ thống có dung lượng RAM hợp lý cho các tác vụ mà chúng phải thực hiện.


6
Tôi không thể tìm thấy một NSWAPcột (Ubuntu 16.04: /).
jjmontes

1
@jjmontes Nó đã bị xóa . Tôi không biết tại sao.
Gilles 'SO- ngừng trở nên xấu xa'

Câu hỏi thường gặp về htop nói rằng tác giả không tin rằng có thể báo cáo chính xác việc sử dụng trao đổi và số liệu hàng đầu đó là không chính xác.
Oliver Evans

0

Trên StackOverflow, đã có một câu trả lời xuất sắc cho câu hỏi đầu tiên của bạn ("Quá trình nào thực sự sử dụng trao đổi?").

https://stackoverflow.com/a/7180078/1442602

Tóm lại, các công cụ như tophoặc htopkhông cung cấp thông tin chính xác về việc sử dụng trao đổi. Bạn nên đi sâu vào /procthư mục (trong tệp giả /proc/$PID/smaps) để có được thông tin chính xác hơn.

Bài đăng được đề cập ở trên có chứa một tập lệnh shell ngắn để thông tin này được lặp lại một cách tốt đẹp.


0

Với htop v1.01, tôi ép "S" để thêm NSWAPcột thay vì "F2" (như Gilles đề xuất), sau đó Columns> Available Columns> và F5thêm nó.

nhập mô tả hình ảnh ở đây


Tôi có htop 2.0.1 và tôi không thấy tùy chọn NSWAP :(
Adam

1
@Adam Người bảo trì không muốn hiển thị cột này nữa do không có cách nào đáng tin cậy để có được thông tin này; xem Tại sao htop không có cột SWAP, như trên cùng?
Genjo

0

Không bỏ phiếu và phân tích cú pháp đầu ra của các công cụ như vmstat, freetop, nơi tốt nhất để tìm có thể là crontabs của người dùng root hoặc người dùng khác trên hệ thống. Nếu tải chung trên hệ thống tăng đột biến vào một thời điểm nhất định, rất có thể có một quá trình trong cron tạo ra nhu cầu về tài nguyên. Nếu không, bạn luôn có thể tạo một tiện ích ghi nhật ký ghetto với scripttiện ích này, nó chỉ ghi lại mọi thứ đi vào STDOUT.

Vì vậy, nếu tôi cần thực hiện một kịch bản ném một lần để bắt đầu ra để kiểm tra sau, trong một thiết bị đầu cuối tôi sẽ gõ:

script /tmp/free.txt

và sau đó

while (true); do date; free; sleep 30; done

và trong một nhà ga khác

script /tmp/top.txt

và sau đó

while (true); do date; top -n 1; sleep 30; done

và sáng hôm sau, tiêu diệt cả hai lệnh scriptvà khớp với đầu ra của topfree

một lần nữa đây là một cách tiếp cận ghetto nhưng có vẻ như bạn chỉ cần một lần

bạn cũng có thể muốn đọc hướng dẫn trao đổi Ubuntu

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.