ฉันเพิ่งดูเมื่อวานนี้สำหรับความต้องการของฉันด้านล่างคือสิ่งที่ฉันได้พบจนถึง:
SWAP_USED = Used_by_Processes + SwapCached + Part_of_Tmpfs + something_else
เรื่องสั้น:
Used_by_Processes - ข้อมูลที่ถูกสลับออกจากหน่วยความจำอย่างสมบูรณ์
SwapCached - ข้อมูลที่ถูกสลับไปยังดิสก์ แต่ยังคงอยู่ในหน่วยความจำ
Part_of_Tmpfs - บางส่วนของข้อมูล tmpfs
เรื่องยาว:
Used_by_Processes - มีคำแนะนำมากมายที่ตีพิมพ์เกี่ยวกับวิธีการคำนวณผิดพลาดนี้) ตัวอย่างเช่นหากเราสรุปVmSwap
รายการทั้งหมดจาก/proc/*/status
หรือSwap
รายการจาก/proc/*/smaps
- เราจะได้รับค่าสูงไป (หน้าแลกเปลี่ยนที่แชร์กันอาจนับได้มากกว่าหนึ่งครั้ง) หากเราไม่เรียกใช้จากroot
ผู้ใช้หรือระบบปฏิบัติการของเรา - การดูเบาจะถูกส่งกลับอย่างเงียบ ๆ ฉันไม่มีวิธีที่เหมาะสมในการระบุหน้าเว็บที่แชร์ แต่การสาด 'แผนที่' แบบเดียวกันให้การประมาณที่ดีกว่าวิธีอื่น ๆ : (โปรดทราบว่าcat
ด้านล่างนี้ไม่มีประโยชน์และจำเป็นต้องมีจริง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 - /proc/meminfo
คนนี้เป็นตรงไปตรงมาและสามารถสกัดได้จากหมดจด บางคนไม่คาดหวังว่าสิ่งนี้จะนับว่าเป็นการแลกเปลี่ยน "ใช้แล้ว" เนื่องจากสำเนาที่ซ้ำกัน (ไม่สกปรก) ของหน้าเดียวกันทั้งใน RAM และ Swap สามารถเป็นอิสระได้ทั้งสองข้างค่อนข้างทันที (ในกรณีที่ต้องการมา) หนึ่งในสำเนา "ปลดปล่อย"
Part_of_Tmpfs - ด้านสว่างคือเมื่อข้อมูล tmpfs ทั้งหมดของคุณเป็นเวลาหลายวันและswappiness
ไม่เป็นศูนย์ - มีโอกาสมากที่ tmpfs ทั้งหมดจะถูกแลกเปลี่ยนออก (และในทางกลับกันสำหรับข้อมูลที่ใช้ล่าสุด) ข้อเสียคือฉันไม่พบ API เพื่อคำนวณเกณฑ์หรือเปอร์เซ็นต์ของจำนวนแลกเปลี่ยนที่เชื่อถือได้อย่างน่าเชื่อถือแม้ว่าจะมี RAM เพียงพอ - เราสามารถคัดลอกข้อมูล tmpfs ทั้งหมดลงในนั้น/dev/null
และรับเบาะแสว่ามีการแลกเปลี่ยนเท่าใด
ข้อผิดพลาดทั่วไปทำในระหว่างการคำนวณขนาด tmpfs มี - สมมติว่า/dev/shm
เป็นเพียงการกำหนดค่า tmpfs หรือพยายามที่จะทำมันด้วย recursive สแกนต่อไฟล์ (ไม่เพียง แต่การใช้งานที่มีแนวโน้มที่จะละเว้นไฟล์ที่ซ่อนอยู่หรือทำมันได้จากที่ไม่ใช่root
แต่มันก็ยังยกเลิกสัญญาแลกเปลี่ยน บางหน้าระหว่างการสำรวจ) df
วิธีที่ง่ายมากคือการใช้ดีเก่า
some_else - ดู " diff 385 MB
" ด้านล่างต้องการการดำน้ำในแหล่งเคอร์เนล ดูสคริปต์ของฉัน:
#!/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"
และผลลัพธ์จากกล่องต่าง ๆ :
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
และการทดลองเล็กน้อยเป็นโบนัส:
[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
PS นอกเหนือจากการประมาณที่กล่าวถึงข้างต้น - มีแหล่งที่มาของข้อผิดพลาดอื่น ๆ เช่นการปัดเศษของ KB เป็น MB ความเป็นไปได้ทางทฤษฎีของความไม่ตรงกันระหว่างขนาดบล็อกของ RAM และ Swap ฯลฯ ฉันไม่แน่ใจว่าครอบคลุมทุกอย่าง ช่วยในระดับหนึ่ง :)
VmSwap
บรรทัด/proc/PID/status
หรือไม่ คำถามไม่ได้ขอการแสดงที่สวยกว่า แต่เป็นการถามว่าอะไรที่สามารถแลกเปลี่ยนได้นอกเหนือจากข้อมูลกระบวนการ