วิธีการตรวจสอบสิ่งที่อยู่ในการแลกเปลี่ยน?


15

ในระบบของฉันฉันมีจำนวน swap ที่ใช้:

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

จะตรวจสอบสิ่งที่แลกเปลี่ยนได้อย่างไร

ฉันพยายามตรวจสอบผ่านกระบวนการ แต่สำหรับ pid ทุกระบบ VmSwap คือ 0:

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

มีอะไรในการสลับ? ฉันคิดเกี่ยวกับ tmpfs - แต่ฉันอ่านไฟล์ทั้งหมดใน tmpfs-es อีกครั้งและมันไม่ได้ล้างขนาดของ swap


คำตอบ:


9

smemเป็นเครื่องมือมาตรฐานสำหรับสิ่งนี้ มันสะอาดและเรียบง่าย

บนระบบที่ใช้ Debian ให้ติดตั้งผ่านตัวจัดการแพ็กเกจ:

 sudo apt-get install smem

เอาต์พุตตัวอย่าง (ถูกตัด) จากระบบของฉัน:

$ 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
แต่จะส่งคืนสิ่งอื่นนอกเหนือจากค่าที่แสดงในVmSwapบรรทัด/proc/PID/statusหรือไม่ คำถามไม่ได้ขอการแสดงที่สวยกว่า แต่เป็นการถามว่าอะไรที่สามารถแลกเปลี่ยนได้นอกเหนือจากข้อมูลกระบวนการ
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

1
smem ไม่ได้ให้ประโยชน์ฉันมากไปกว่า greping proc: undefine @ uml: ~ $ sudo smem -c swap | uniq -c 1 Swap 227 0
undefine

2

ฉันเพิ่งดูเมื่อวานนี้สำหรับความต้องการของฉันด้านล่างคือสิ่งที่ฉันได้พบจนถึง:

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 ฯลฯ ฉันไม่แน่ใจว่าครอบคลุมทุกอย่าง ช่วยในระดับหนึ่ง :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.