Làm thế nào tôi có thể tìm ra các quy trình đang sử dụng không gian trao đổi?


10

Tôi có một máy chủ linux báo cáo hàng đầu về 9GB trao đổi được sử dụng: hàng đầu

Nhưng tôi không thể hình dung được nó sử dụng trao đổi ở đâu, một số kết quả của google nói rằng việc Otheo dõi hàng đầu psẽ hiển thị việc sử dụng trao đổi theo quy trình. Nhưng như trong hình trên, lấy một số tiền ngắn gọn của cột SWAP cho thấy> 10GB trao đổi được sử dụng, vậy con số 9 GB cho việc sử dụng trao đổi đến từ đâu?

Các báo cáo hàng đầu cho thấy khoảng 96492kb ram được sử dụng bởi bộ đệm. Có bất cứ điều gì tôi có thể làm để sử dụng điều này, thay vì sử dụng trao đổi?


1
đầu trang (trên mỗi trang hướng dẫn) tính toán SWAP là VIRTUAL - Sử dụng ram VẬT LÝ. Không hoàn toàn chính xác từ các thí nghiệm của tôi.
lornix

Câu trả lời:


6

Có thể nhiều chương trình sẽ sử dụng cùng một khu vực trao đổi, vì vậy nó sẽ được báo cáo hai lần.

Không cần phải cố gắng bảo Linux sử dụng vùng đệm thay vì trao đổi - nó đã rất thông minh về những gì nó đang làm. Nếu bạn đang sử dụng 9gb trao đổi và 9gb bộ đệm, đó là một điều tốt ... điều đó có nghĩa là Linux nhận ra rằng 9gb nội dung được nạp vào bộ nhớ không được sử dụng tích cực, do đó, việc trao đổi nó vào đĩa sao cho hiệu quả hơn bộ đệm có thể phát triển lớn hơn, và cải thiện hiệu suất của bạn.


EDIT: Nếu bạn thêm tất cả bộ nhớ được sử dụng cho mỗi quá trình, bạn cũng sẽ nhận được nhiều hơn RAM vật lý của mình. Điều này là do các thư viện chia sẻ đang được sử dụng bởi nhiều chương trình, cũng như cách Linux xử lý các nhánh - nó không sao chép toàn bộ chương trình trong bộ nhớ, nó chỉ sao chép các phần khác nhau giữa hai trường hợp. Trong một số trường hợp, bộ nhớ video có thể được hiển thị như một phần của quy trình X - Tôi nghĩ rằng các thẻ Voodoo3 cũ đã làm điều này. Có thể có những trường hợp khác mà bộ nhớ "ảo" cũng có thể hiển thị ở trên cùng.


Tôi không nghĩ các thư viện dùng chung nên được tính là trao đổi, vì khi khởi động hệ thống, không sử dụng trao đổi nhưng có nhiều thư viện dùng chung đã được tải. Dù sao, tôi thấy rằng hệ thống của tôi sử dụng khoảng 9GB phân vùng trao đổi, tôi chỉ muốn tìm hiểu quá trình nào sử dụng hầu hết các trao đổi (loại trừ thư viện chia sẻ, tệp bản đồ bộ nhớ ...)
secmask

3

Phân tích cú pháp thư mục con / Proc:

Là một kịch bản bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

Đầu ra có thể được sắp xếp Hi-Lo bằng cách sắp xếp:

{blah}| sort -rn

Tất nhiên, viết lại điều này trong ngôn ngữ yêu thích của bạn trong tuần như bạn muốn. Awk-fu của tôi không mạnh.

(cắt-n-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr


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.