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