[Ubuntu] 프로세스 메모리 사용량 확인 방법
September 01, 2024
Ubuntu(Devian Linux)에서 특정 프로세스의 메모리 사용량을 확인하는 다양한 방법을 알아보겠습니다.
메모리 사용량을 보여줄 때 RSS(Resident Set Size)로 표현되는데 RSS를 잘 모르신다면 아래 내용을 참고하세요.
- RSS는 프로세스가 실제로 물리 메모리(RAM)에 상주하는 메모리의 크기를 나타냅니다.
- RSS는 프로세스가 현재 사용하고 있는 물리적 메모리 양을 측정하며, 킬로바이트(KB) 단위로 표시됩니다.
- RSS에는 공유 메모리 영역도 포함될 수 있습니다. 여러 프로세스가 같은 물리적 메모리 페이지를 공유하는 경우, 각 프로세스의 RSS에 모두 중복으로 포함됩니다.
- RSS는 물리 메모리에 상주하는 메모리만 포함되며, 디스크에 스왑된 메모리는 포함되지 않습니다.
1. TOP 명령어를 이용한 방법
top 명령어는 실시간으로 프로세스 별 메모리 사용량을 보여줍니다.
- 메모리 사용량이 높은 순서대로 정렬해서 보여줌
- 출력되는 결과에서 메모리는 RES(Resident Set Size)와 SHR(Shared Memory Size)로 확인
- “shift + m”를 입력하면 메모리 사용량 기준으로 정렬 (m은 소문자로 입력)
- “shift + p”를 입력하면 CPU 사용량 기준으로 정렬
- “shift + n”을 입력하면 PID 순서로 정렬
- “shift + t”을 입력하면 PID 순서로 정렬
devjss@mjs:~$ top
top - 14:54:58 up 1 day, 18:21, 1 user, load average: 0.20, 0.17, 0.09
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 31739.2 total, 27274.7 free, 3257.5 used, 1207.0 buff/cache
MiB Swap: 8192.0 total, 8192.0 free, 0.0 used. 28027.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 166072 11332 8220 S 0.0 0.0 0:00.33 systemd
2 root 20 0 2476 1436 1320 S 0.0 0.0 0:00.00 init-systemd(Ub
7 root 20 0 2504 144 132 S 0.0 0.0 0:00.00 init
42 root 19 -1 39660 15996 14880 S 0.0 0.0 0:00.10 systemd-journal
62 root 20 0 22220 6132 4512 S 0.0 0.0 0:00.11 systemd-udevd
76 root 20 0 4492 200 48 S 0.0 0.0 0:00.00 snapfuse
77 root 20 0 4624 168 16 S 0.0 0.0 0:00.00 snapfuse
79 root 20 0 4760 1876 1336 S 0.0 0.0 0:00.49 snapfuse
82 root 20 0 4768 1952 1412 S 0.0 0.0 0:01.44 snapfuse
83 root 20 0 4956 1856 1364 S 0.0 0.0 0:00.68 snapfuse
178 systemd+ 20 0 25664 13680 9288 S 0.0 0.0 0:00.10 systemd-resolve
235 root 20 0 4304 2676 2432 S 0.0 0.0 0:00.00 cron
236 message+ 20 0 8584 4568 4028 S 0.0 0.0 0:00.01 dbus-daemon
242 root 20 0 30104 18864 10052 S 0.0 0.1 0:00.06 networkd-dispat
246 syslog 20 0 222400 7080 4464 S 0.0 0.0 0:00.01 rsyslogd
248 root 20 0 1984488 33948 16844 S 0.0 0.1 0:00.27 snapd
250 root 20 0 15316 7320 6388 S 0.0 0.0 0:00.06 systemd-logind
2. ps 명령어를 이용한 방법
ps 명령어는 현재 실행 중인 프로세스의 정보를 출력합니다. aux 옵션을 함께 사용하면 프로세스의 메모리 정보도 함께 출력합니다.
--sort=-%mem
은 프로세스들을 메모리 크기로 정렬- 출력 결과에서
%MEM
은 메모리 사용률(%),RSS
는 실제 메모리 사용량을 의미
devjss@mjs:~$ ps aux --sort=-%mem
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 380 0.3 0.2 153776 70424 ? Sl 14:54 0:01 /snap/ubuntu-desktop-installer/1276/usr/bin/python3.1
root 248 0.0 0.1 1984488 41632 ? Ssl 14:54 0:00 /usr/lib/snapd/snapd
root 468 0.2 0.1 43428 37748 ? S 14:54 0:01 python3 /snap/ubuntu-desktop-installer/1276/usr/bin/c
root 289 0.0 0.0 107220 21284 ? Ssl 14:54 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unatt
root 242 0.0 0.0 30104 18864 ? Ss 14:54 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-s
root 42 0.0 0.0 47856 16036 ? S<s 14:54 0:00 /lib/systemd/systemd-journald
systemd+ 178 0.0 0.0 25664 13680 ? Ss 14:54 0:00 /lib/systemd/systemd-resolved
root 1 0.0 0.0 166072 11332 ? Ss 14:54 0:00 /sbin/init
devjss 446 0.0 0.0 17168 9132 ? Ss 14:54 0:00 /lib/systemd/systemd --user
syslog 246 0.0 0.0 222400 9068 ? Ssl 14:54 0:00 /usr/sbin/rsyslogd -n -iNONE
root 250 0.0 0.0 15316 7320 ? Ss 14:54 0:00 /lib/systemd/systemd-logind
3. /proc/[pid]/status 를 이용한 방법
프로세스가 생성되면 /proc/[pid]/status
경로에 파일이 만들어지며, 프로세스의 상태 정보가 기록됩니다.
PID를 알고 있다면 다음과 같이 cat으로 해당 프로세스의 정보를 출력할 수 있습니다.
cat /proc/[PID]/status
PID 189의 정보를 출력해보면, 메모리 사용량 정보도 출력되는 것을 볼 수 있습니다.
- VmRSS : 실제 물리적 메모리 크기 (KB)
- VmSize : 프로세스에 할당된 가상메모리 크기 (KB)
devjss@mjs:~$ cat /proc/189/status
Name: dbus-daemon
Umask: 0022
State: S (sleeping)
Tgid: 189
Ngid: 0
Pid: 189
PPid: 1
TracerPid: 0
Uid: 101 101 101 101
Gid: 101 101 101 101
FDSize: 128
Groups:
NStgid: 189
NSpid: 189
NSpgid: 189
NSsid: 189
VmPeak: 9668 kB
VmSize: 9660 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 5144 kB
VmRSS: 5144 kB
RssAnon: 724 kB
RssFile: 4420 kB
RssShmem: 0 kB
VmData: 760 kB
VmStk: 132 kB
VmExe: 148 kB
VmLib: 6020 kB
VmPTE: 56 kB
VmSwap: 0 kB
grep을 사용하여 메모리 항목만 확인할 수도 있습니다.
devjss@mjs:~$ cat /proc/189/status | grep -i vmrss
VmRSS: 5144 kB
devjss@mjs:~$ cat /proc/189/status | grep -i vmsize
VmSize: 9660 kB
4. pmap을 이용한 방법
pmap은 특정 프로세스의 메모리 맵을 출력합니다. 또한, 가상메모리 크기 및 RSS도 함께 출력합니다.
-x
옵션은 디테일한 정보 함께 출력Kbytes
열은 가상 메모리 크기(KB)RSS
열은 RAM에 매핑된 메모리 크기(KB)Mapping
열은 메모리에 매핑된 파일- anon은 익명(anonymous) 메모리 매핑, 특정 파일에 연결되지 않고 일시적으로 사용되는 메모리 영역
Mode
열은 메모리 매핑의 접근 권한(r: 읽기, w: 쓰기, x: 실행)
devjss@mjs:~$ pmap -x 449032
449032: npm start
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 71140 30564 0 r-x-- node
0000000004b78000 16 16 8 r---- node
0000000004b7c000 96 96 68 rw--- node
....
00007f1b89f94000 8 8 8 rw--- ld-linux-x86-64.so.2
00007fff8582c000 132 64 64 rw--- [ stack ]
00007fff85890000 16 0 0 r---- [ anon ]
00007fff85894000 8 4 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 708520 57064 22580