스왑 내용을 확인하는 방법은 무엇입니까?

스왑 내용을 확인하는 방법은 무엇입니까?

내 시스템에서는 일부 스왑 공간을 사용합니다.

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/*/statusSwap/proc/*/smapsroot근사치를 내다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 데이터가 며칠 동안 접촉되지 않았고 swappiness0이 아닌 경우 전체 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과 스왑 블록 크기 간의 이론적 불일치 가능성 등과 같은 다른 오류 원인이 있습니다. 모든 내용을 다 다룰지는 모르겠지만 어느 정도 도움이 되었으면 좋겠습니다 :)

관련 정보