Linux 시스템에서 스왑 메모리를 효과적으로 관리하는 것은 중요한 과제 중 하나입니다. 이번 블로그에서는 스왑 메모리를 사용하는 프로세스를 확인하는 방법에 대해 다루겠습니다.

주요 내용

1. 스왑 메모리란?

스왑 메모리는 주 메모리(RAM)가 부족할 때 운영체제가 사용하는 가상 메모리 공간입니다. 프로세스는 스왑 메모리를 사용하여 필요한 데이터를 저장하고 불러옵니다.

2. 스왑 메모리 사용 프로세스 확인 방법

1) /proc/meminfo | grep Swap

시스템의 메모리 정보를 출력하고, 그 중에서도 스왑(Swap)에 관련된 정보만을 필터링하여 보여줍니다. 아래는 예시 출력입니다.

$ cat /proc/meminfo | grep Swap
SwapCached:         123456 kB
SwapTotal:          1048576 kB
SwapFree:            987654 kB

여기서, 각각의 값은 다음과 같은 의미를 가집니다.

  • SwapCached: 현재 사용 중이지 않지만 디스크에 저장된 스왑 영역
  • SwapTotal: 스왑 영역의 총 용량
  • SwapFree: 현재 사용 가능한 스왑 영역의 용량

2) smem -rs swap

각 프로세스별로 스왑 메모리 사용량을 나타내는 통계를 출력합니다. 아래는 예시 출력입니다.

$ smem -rs swap
  PID User     Command                         Swap      USS      PSS      RSS
12345 user     /path/to/process1                512    1024     2048     4096
67890 user     /path/to/process2                256    2048     3072     5120

여기서, 각 열의 의미는 다음과 같습니다.

  • PID: 프로세스 ID
  • User: 프로세스를 실행한 사용자
  • Command: 프로세스의 실행 명령어
  • Swap: 스왑 메모리 사용량
  • USS: Unique Set Size (메모리 중 고유하게 사용 중인 크기)
  • PSS: Proportional Set Size (모든 공유 페이지의 일부)
  • RSS: Resident Set Size (프로세스가 실제로 사용 중인 메모리의 양)

3) /proc/swaps

‘/proc/swaps’ 파일을 통해 스와핑 상태를 확인할 수 있습니다. 이 파일을 확인하기 위해 ‘cat’ 명령어를 사용하면 다음과 같은 결과를 얻을 수 있습니다.

[root@localhost]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda3                               partition       2104504 879844  -1

이 결과에는 다음과 같은 정보가 포함되어 있습니다.

  • Filename: 스왑 파티션의 위치를 나타냅니다.
  • Type: 스왑 공간의 유형을 나타냅니다. 일반적으로 ‘partition’(파티션) 또는 ‘file’(스왑 파일)이 됩니다.
  • Size: 스왑 공간의 전체 크기를 KB 단위로 나타냅니다.
  • Used: 현재 사용 중인 스왑 공간의 크기를 KB 단위로 나타냅니다.
  • Priority: 스왑 공간의 우선순위를 나타냅니다. 여러 스왑 공간이 있을 경우, 숫자가 클수록 먼저 사용됩니다.

따라서 위의 결과는 ‘/dev/sda3’ 파티션에 총 2104504KB의 스왑 공간이 있으며, 그 중 879844KB가 사용 중이라는 것을 나타냅니다.

4) grep VmSwap /proc/*/status

각 프로세스의 스왑 사용량을 확인하려면 ‘/proc’ 디렉토리에 있는 각 프로세스의 ‘status’ 파일에서 ‘VmSwap’ 값을 확인하면 됩니다. 이를 위해 ‘grep’와 ‘sort’ 명령어를 사용하면 다음과 같은 결과를 얻을 수 있습니다.

[root@localhost]# grep VmSwap /proc/*/status | sort -k 2 -nr
/proc/18440/status:VmSwap:        834088 kB
/proc/10924/status:VmSwap:         12120 kB

이 결과는 각 프로세스의 ‘VmSwap’ 값을 KB 단위로 나타내며, 사용량이 많은 순서대로 정렬되어 있습니다. 따라서 위의 결과를 통해 프로세스 18440이 834088KB의 스왑 공간을 사용하고 있음을 알 수 있습니다. 해당 프로세스에 대한 프로그램 정보를 찾기 위해 아래와 같이 ps 명령어를 통해서 swap을 사용하는 프로세스 확인이 가능하다.

[root@localhost]# ps -ef | grep 18440
nobody   18440     1  0  2015 ?        8-08:03:54 /usr/local/memcached/bin/memcached -d -m 1024

특정 프로세스에 대해 상세 정보 확인하는 명령어

cat /proc/15267/status
Name:   httpd
State:  S (sleeping)
Tgid:   15267
Pid:    15267
PPid:   1540
TracerPid:      0
Uid:    99      99      99      99
Gid:    99      99      99      99
Utrace: 0
FDSize: 64
Groups: 99
VmPeak:   555952 kB // 최대할당 가상 메모리 사이즈
VmSize:   552112 kB // 가상 메모리 사이즈
VmLck:         0 kB // swap out 할 수 없게 고정된 메모리 사이즈
VmHWM:     16480 kB // 최대할당 물리 메모리 사이즈
VmRSS:     13300 kB // 물리 메모리 사이즈
VmData:    83436 kB // heap 영역 사이즈
VmStk:        88 kB // stack 영역 사이즈
VmExe:       416 kB // 실행코드 영역 사이즈
VmLib:     30708 kB // shared library 영역 사이즈
VmPTE:       488 kB // page table 사이즈
VmSwap:      232 kB // swap 사이즈
Threads:        1
SigQ:   0/127392
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 000000018c0046eb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   ff
Cpus_allowed_list:      0-7
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        2079
nonvoluntary_ctxt_switches:     49

마무리

Linux 시스템에서 스왑 메모리를 효과적으로 관리하는 것은 성능 향상에 중요한 역할을 합니다. 이 블로그를 통해 개발자들은 스왑 메모리를 사용하는 프로세스를 신속하게 확인하는 방법을 배울 수 있었고, 더 나아가 다양한 명령어를 통해 메모리 관리에 대한 폭넓은 지식을 쌓을 수 있기를 기대합니다.

태그: ,

카테고리:

업데이트:

댓글남기기