스왑에 무엇이 있는지 확인하는 방법?


15

내 시스템에는 어느 정도의 스왑이 사용되었습니다.

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의 모든 파일을 다시 읽습니다. 스왑 크기를 플러시하지 않습니다.


답변:


9

smem이를위한 표준 도구입니다. 깨끗하고 간단합니다.

데비안 기반 시스템에서 패키지 관리자를 통해 설치하십시오 :

 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 'SO- 악마 그만해'

1
smem은 greping proc보다 더 유용한 것을 제공하지 않습니다. undefine @ uml : ~ $ sudo smem -c swap | uniq -c 1 스왑 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 -하는 방법에 게시 된 많은 지시가 잘못은 이것 -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 데이터가 며칠 동안 손대지 않고 swappiness0이 아닌 경우 전체 tmpfs가 교체 될 가능성이 높다는 것입니다 (그리고 최근에 사용한 데이터의 경우도 마찬가지). 단점은 충분한 RAM이있는 경우 임계 값 또는 스왑 된 비율의 백분율을 안정적으로 계산하는 API를 찾지 못했다는 것입니다 .RAM이 충분하면 전체 tmpfs 데이터를 복사 /dev/null하여 스왑 된 WAS의 양에 대한 단서를 얻을 수 있습니다.

tmpfs의 크기의 계산 중에 일반적인 실수는 - 그 가정 /dev/shm만 구성 또는 재귀 당 파일을 검색하여 일을하려고 (단지 구현 숨겨진 파일을 생략하거나 비에서 그것을 할 경향이 TMPFS입니다 root,하지만도 않은 스왑 순회 중 일부 페이지). 훨씬 쉬운 방법은 좋은 오래된 것을 사용하는 것 df입니다.

something_elsediff 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과 스왑의 블록 크기 사이의 불일치 등의 이론적 가능성과 같은 다른 오류의 원인이 있습니다. 어느 정도 도움이됩니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.