Làm thế nào để kiểm tra những gì trong trao đổi?


15

Trên hệ thống của tôi, tôi có một số lượng trao đổi được sử dụng:

undefine@uml:~$ free
             total       used       free     shared    buffers     cached
Mem:      16109684   15848264     261420     633496      48668    6096984
-/+ buffers/cache:    9702612    6407072
Swap:     15622140        604   15621536

Làm thế nào để kiểm tra những gì trong trao đổi?

Tôi cố gắng kiểm tra nó thông qua các quy trình, nhưng với mỗi pid trên hệ thống VmSwap là 0:

undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0

Những gì khác có thể được trao đổi? Tôi đã nghĩ về tmpfs - nhưng tôi đọc lại tất cả các tệp trên tmpfs-es - và nó không xóa kích thước trao đổi.


Câu trả lời:


9

smemlà công cụ tiêu chuẩn cho việc này. Nó sạch sẽ và đơn giản.

Trên hệ thống dựa trên Debian, cài đặt nó thông qua trình quản lý gói:

 sudo apt-get install smem

Một đầu ra mẫu (đã cắt) từ hệ thống của tôi:

$ smem -s swap -t -k -n
  PID User     Command                         Swap      USS      PSS      RSS 
  831 1000     /bin/bash                          0     3.8M     3.8M     5.5M 
 3931 1000     bash /usr/bin/sage -c noteb   276.0K     4.0K    20.0K     1.2M 
17201 1000     /usr/bin/dbus-launch --exit   284.0K     4.0K     8.0K   500.0K 
17282 1000     /usr/bin/mate-settings-daem   372.0K    11.0M    11.7M    21.8M 
17284 1000     marco                         432.0K    16.7M    18.1M    29.5M 
17053 1000     mate-session                  952.0K     3.3M     3.5M     9.2M 
 3972 1000     python /usr/lib/sagemath/sr     2.7M   101.8M   102.1M   104.3M 
-------------------------------------------------------------------------------
  141 1                                        5.2M     3.9G     4.0G     4.5G 

6
Nhưng nó có trả về bất cứ thứ gì ngoài giá trị được hiển thị trong VmSwapdòng /proc/PID/statuskhông? Câu hỏi không phải là yêu cầu màn hình đẹp hơn, nó hỏi những gì có thể được trao đổi ngoài dữ liệu xử lý.
Gilles 'SO- ngừng trở nên xấu xa'

1
smem không mang lại cho tôi điều gì hữu ích hơn là greping Proc: undefine @ uml: ~ $ sudo smem -c exchange | uniq -c 1 Hoán đổi 227 0
xác định

2

Tôi chỉ bắt đầu xem xét nó ngày hôm qua cho nhu cầu của mình, dưới đây là những gì tôi đã tìm thấy cho đến nay:

SWAP_USED = Được sử dụng_by_Processes + SwapCached + Part_of_Tmpfs + Something_else

Truyện ngắn:

Được sử dụng_by_Processes - dữ liệu đã được hoán đổi hoàn toàn khỏi bộ nhớ.

SwapCached - dữ liệu đã được hoán đổi vào đĩa, nhưng vẫn còn trong bộ nhớ.

Part_of_Tmpfs - một phần dữ liệu tmpfs.

Câu chuyện dài:

Được sử dụng_by_Processes - có nhiều hướng dẫn được xuất bản về cách tính sai mục này;) Ví dụ: nếu chúng tôi tổng hợp tất cả VmSwapcác mục từ /proc/*/statushoặc Swapmục từ /proc/*/smaps- chúng tôi sẽ đánh giá quá cao (các trang được trao đổi được chia sẻ có thể được tính nhiều lần). Nếu chúng tôi không chạy nó từ rootngười dùng hoặc hệ điều hành của chúng tôi - sự đánh giá thấp sẽ âm thầm được trả lại. Tôi không có cách xác định các trang được chia sẻ phù hợp, nhưng việc văng cùng một 'bản đồ' mang lại sự gần đúng tốt hơn nhiều so với các cách tiếp cận khác: (lưu ý rằng catbên dưới không vô dụng và thực sự cần a 2>/dev/null)

[root@a:~]# cat /proc/*/status|awk '      /^VmSwap/{           s+=$2       }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk '         /^Swap/{           s+=$2       }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk '/-/{r=$0}/^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print s}'
14940
[root@a:~]# free -k|grep -e Swap -e used
             total       used       free     shared    buffers     cached
Swap:      8388600      15508    8373092

SwapCached - cái này đơn giản và có thể được trích xuất sạch /proc/meminfo. Một số người sẽ không mong muốn điều này được tính là trao đổi "đã sử dụng", vì một bản sao (không bẩn) trùng lặp của cùng một trang trong cả RAM và Hoán đổi có thể được giải phóng ở cả hai bên ngay lập tức (trong trường hợp nếu có nhu cầu) một trong những bản sao "giải phóng".

Part_of_Tmpfs - mặt sáng là khi tất cả dữ liệu tmpfs của bạn không được xử lý trong nhiều ngày và swappinesskhác không - rất có thể toàn bộ tmpfs bị tráo đổi (và ngược lại đối với dữ liệu được sử dụng gần đây). Nhược điểm là tôi không tìm thấy API nào để tính toán ngưỡng hoặc tỷ lệ phần trăm đáng tin cậy của nó, mặc dù nếu có đủ RAM - chúng ta có thể sao chép toàn bộ dữ liệu tmpfs vào /dev/nullvà do đó có được một số gợi ý về số lượng nó đã được hoán đổi.

Các lỗi phổ biến trong quá trình tính toán kích thước tmpfs là - giả sử rằng đó /dev/shmlà các tmpfs duy nhất được định cấu hình hoặc cố gắng thực hiện bằng cách quét đệ quy trên mỗi tệp (không chỉ triển khai có xu hướng bỏ qua các tệp bị ẩn hoặc thực hiện từ không root, nhưng nó cũng không hoán đổi một số trang trong quá trình duyệt). Cách dễ dàng hơn nhiều là sử dụng tốt cũ df.

Something_else - xem " diff 385 MB" bên dưới, cần đi sâu vào các nguồn kernel. Xem kịch bản của tôi:

#!/bin/bash
TMPFS=`df -kP           |awk '          /^tmpfs/{          s+=$3       }END{print int( s/1024)}'`
PROCS=`cat /proc/*/smaps|awk '/-/{r=$0} /^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print int( s/1024)}'`
SCACH=`cat /proc/meminfo|awk '          /^SwapCached/                      {print int($2/1024)}'`
TOTAL=`free -k          |awk '          /^Swap/                            {print int($3/1024)}'`
echo  -e " df $TMPFS\t    smaps $PROCS \tSwapCache $SCACH\t| $TOTAL\tswap | diff $[TOTAL-TMPFS-PROCS-SCACH]\tMB"

và đầu ra từ các hộp khác nhau:

xa002:   df 0       smaps 271   SwapCache 3858  | 4120  swap | diff -9  MB
sg003:   df 0       smaps 234   SwapCache 3876  | 4111  swap | diff 1   MB
sg001:   df 0       smaps 245   SwapCache 3845  | 4093  swap | diff 3   MB
sg002:   df 0       smaps 244   SwapCache 3843  | 4091  swap | diff 4   MB
dm001:   df 2       smaps 971   SwapCache 728   | 1707  swap | diff 6   MB
hm012:   df 270     smaps 161   SwapCache 29    | 454   swap | diff -6  MB
hm003:   df 274     smaps 142   SwapCache 27    | 440   swap | diff -3  MB
hm006:   df 262     smaps 150   SwapCache 29    | 437   swap | diff -4  MB
hm002:   df 265     smaps 120   SwapCache 28    | 412   swap | diff -1  MB
hm009:   df 258     smaps 124   SwapCache 33    | 410   swap | diff -5  MB
hm011:   df 262     smaps 118   SwapCache 28    | 406   swap | diff -2  MB
hm008:   df 245     smaps 122   SwapCache 32    | 396   swap | diff -3  MB
hm005:   df 247     smaps 120   SwapCache 33    | 396   swap | diff -4  MB
dp001:   df 0       smaps 0     SwapCache 0     | 386   swap | diff 386 MB
hm014:   df 184     smaps 134   SwapCache 34    | 343   swap | diff -9  MB
hm007:   df 0       smaps 132   SwapCache 32    | 158   swap | diff -6  MB
bm002:   df 0       smaps 121   SwapCache 25    | 141   swap | diff -5  MB
dm002:   df 2       smaps 70    SwapCache 71    | 139   swap | diff -4  MB
bm001:   df 3       smaps 102   SwapCache 28    | 131   swap | diff -2  MB
bm004:   df 0       smaps 98    SwapCache 29    | 126   swap | diff -1  MB
hm013:   df 0       smaps 100   SwapCache 30    | 124   swap | diff -6  MB
bm006:   df 0       smaps 103   SwapCache 15    | 122   swap | diff 4   MB
hm010:   df 0       smaps 102   SwapCache 24    | 122   swap | diff -4  MB
hm001:   df 0       smaps 101   SwapCache 25    | 121   swap | diff -5  MB
bm003:   df 0       smaps 98    SwapCache 15    | 107   swap | diff -6  MB
bm005:   df 0       smaps 70    SwapCache 17    | 85    swap | diff -2  MB
sg004:   df 0       smaps 72    SwapCache 14    | 83    swap | diff -3  MB
sg001:   df 0       smaps 41    SwapCache 33    | 78    swap | diff 4   MB
sg005:   df 0       smaps 59    SwapCache 20    | 75    swap | diff -4  MB
sg003:   df 0       smaps 58    SwapCache 18    | 72    swap | diff -4  MB
sg006:   df 0       smaps 56    SwapCache 13    | 65    swap | diff -4  MB
sg002:   df 0       smaps 54    SwapCache 12    | 64    swap | diff -2  MB
xa001:   df 0       smaps 56    SwapCache 5     | 55    swap | diff -6  MB

Và một thử nghiệm nhỏ như phần thưởng:

[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  12G  271M   12G   3% /dev/shm
tmpfs                 8.0G   84K  8.0G   1% /tmp
[root@hm012:~]# ./get_swap.sh
 df 270     smaps 161   SwapCache 29    | 454   swap | diff -6  MB
[root@hm012:~]# rm -rf /dev/shm/*
[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  12G     0   12G   0% /dev/shm
tmpfs                 8.0G   84K  8.0G   1% /tmp
[root@hm012:~]# ./get_swap.sh
 df 0       smaps 161   SwapCache 29    | 185   swap | diff -5  MB

Ngoài các phép tính gần đúng được đề cập ở trên - còn có các nguồn lỗi khác, như làm tròn KB thành MB, khả năng về mặt lý thuyết là không khớp giữa kích thước khối của RAM và Hoán đổi, v.v. Tôi không chắc nó bao gồm mọi thứ, nhưng hy vọng điều này giúp một phần nào đó :)

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.