내 시스템에서는 일부 스왑 공간을 사용합니다.
undefine@uml:~$ free
total used free shared buffers cached
Mem: 16109684 15848264 261420 633496 48668 6096984
-/+ buffers/cache: 9702612 6407072
Swap: 15622140 604 15621536
스왑 영역에 무엇이 있는지 어떻게 확인하나요?
프로세스별로 확인을 시도했지만 VmSwap 시스템의 모든 pid는 0입니다.
undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0
교환에는 또 무엇이 포함될 수 있습니까? tmpfs를 고려했지만 tmpfs-es의 모든 파일을 다시 읽었으며 스왑 크기가 플러시되지 않습니다.
답변1
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
답변2
나는 내 필요에 맞게 어제부터 조사하기 시작했으며 지금까지 찾은 내용은 다음과 같습니다.
SWAP_USED = 프로세스에서 사용 + SwapCached + Part_of_Tmpfs + Something_else
단편:
프로세스에서 사용– 메모리에서 완전히 스왑된 데이터입니다.
캐시 교환– 디스크로 스왑되었지만 메모리에 남아 있는 데이터입니다.
임시 파일 시스템 부분– tmpfs 데이터의 일부입니다.
매우 긴 이야기:
프로세스에서 사용– 이를 수행하는 방법에 대한 많은 지침이 게시되어 있습니다.실수- 이것을 계산하세요 ;) 예를 들어, 모든 항목을 합산하면 - 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
캐시 교환– 이것은 간단하고 깔끔하게 추출할 수 있습니다 /proc/meminfo
. 어떤 사람들은 이것이 "사용된" 스왑으로 간주될 것이라고 기대하지 않을 것입니다. 왜냐하면 RAM과 스왑에 있는 동일한 페이지의 중복(더티가 아닌) 복사본이 양쪽에서 즉시 해제되어(요구가 발생하는 경우) 복사본 중 하나를 만들 수 있기 때문입니다. 해방" ".
임시 파일 시스템 부분– 좋은 점은 모든 tmpfs 데이터가 며칠 동안 접촉되지 않았고 swappiness
0이 아닌 경우 전체 tmpfs가 교체될 가능성이 높다는 것입니다(그 반대의 경우도 최근에 사용된 데이터에 대해). 단점은 스왑 볼륨의 임계값이나 비율을 안정적으로 계산하는 API를 찾지 못했다는 것입니다. 하지만 RAM이 충분하면 전체 tmpfs 데이터를 여기에 복사하여 /dev/null
스왑 볼륨에 대한 몇 가지 단서를 얻을 수 있습니다.
tmpfs 크기를 계산하는 동안 저지르는 일반적인 실수는 이것이 /dev/shm
구성된 유일한 tmpfs라고 가정하거나 각 파일을 재귀적으로 스캔하여 이를 시도하는 것입니다(구현 시 숨겨진 파일을 생략하거나 파일이 아닌 파일에서 실행하는 경향이 있을 뿐만 root
아니라 교환 과정)의 일부 페이지). 더 쉬운 방법은 오래된 것을 사용하는 것입니다 df
.
다른 것들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과 스왑 블록 크기 간의 이론적 불일치 가능성 등과 같은 다른 오류 원인이 있습니다. 모든 내용을 다 다룰지는 모르겠지만 어느 정도 도움이 되었으면 좋겠습니다 :)