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ả VmSwap
các mục từ /proc/*/status
hoặc Swap
mụ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ừ root
ngườ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 cat
bê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à swappiness
khá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/null
và 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/shm
là 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 đó :)
VmSwap
dòng/proc/PID/status
khô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ý.