어제 내 필요에 따라 조사하기 시작했습니다. 아래는 내가 찾은 것입니다.
SWAP_USED = Used_by_Processes + SwapCached + Part_of_Tmpfs + something_else
단편:
Used_by_Processes – 메모리에서 완전히 교체 된 데이터.
SwapCached – 디스크로 스와핑되었지만 여전히 메모리에 남아있는 데이터입니다.
Part_of_Tmpfs – tmpfs 데이터의 일부입니다.
긴 이야기:
Used_by_Processes -하는 방법에 게시 된 많은 지시가 잘못은 이것 -calculate) 예 우리 모두 정리해 경우 VmSwap
에서 항목 /proc/*/status
또는 Swap
에서 항목을 /proc/*/smaps
- 우리는 과대 평가를 (공유 교환 페이지를 한 번 이상 계산 얻을 수있다) 얻을 것이다. root
사용자 또는 OS 에서 실행하지 않으면 과소 평가가 자동으로 반환됩니다. 나는 공유 페이지를 식별하는 적절한 방법이 없지만 같은 '지도'의 튀는 훨씬 더 제공 근사 다른 방법보다 : (참고 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과 스왑 모두에서 동일한 페이지의 복제본 (더러워지지 않은) 사본이 양쪽에서 아주 즉각적으로 해제 될 수 있으므로 (필요한 경우), 일부 사람들은 이것을 "사용 된"스왑으로 간주하지 않을 것입니다. 사본 중 하나가 "해제"되었습니다.
Part_of_Tmpfs – 밝은면은 모든 tmpfs 데이터가 며칠 동안 손대지 않고 swappiness
0이 아닌 경우 전체 tmpfs가 교체 될 가능성이 높다는 것입니다 (그리고 최근에 사용한 데이터의 경우도 마찬가지). 단점은 충분한 RAM이있는 경우 임계 값 또는 스왑 된 비율의 백분율을 안정적으로 계산하는 API를 찾지 못했다는 것입니다 .RAM이 충분하면 전체 tmpfs 데이터를 복사 /dev/null
하여 스왑 된 WAS의 양에 대한 단서를 얻을 수 있습니다.
tmpfs의 크기의 계산 중에 일반적인 실수는 - 그 가정 /dev/shm
만 구성 또는 재귀 당 파일을 검색하여 일을하려고 (단지 구현 숨겨진 파일을 생략하거나 비에서 그것을 할 경향이 TMPFS입니다 root
,하지만도 않은 스왑 순회 중 일부 페이지). 훨씬 쉬운 방법은 좋은 오래된 것을 사용하는 것 df
입니다.
something_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과 스왑의 블록 크기 사이의 불일치 등의 이론적 가능성과 같은 다른 오류의 원인이 있습니다. 어느 정도 도움이됩니다 :)
VmSwap
행에 표시된 값 이외의 다른 값을 반환/proc/PID/status
합니까? 문제는 더 예쁜 디스플레이를 요구하는 것이 아니라 프로세스 데이터 이외의 스왑에 무엇이 있는지를 묻는 것입니다.