dev-ops/Linux

[Linux] smem으로 Linux RAM 사용량 파악하기

heemang_e 2025. 4. 17. 12:46

 

  • smem 명령어는 리눅스 시스템에서만 사용가능 합니다.
  • smem 명령어는 /proc 파일 시스템을 통해 메모리 정보를 수집합니다.
    • /proc은 리눅스 고유의 가상 파일 시스템이며, 각 프로세스의 메모리 정보가 /proc/{pid}/smaps 파일에 저장됩니다.

 

RSS, USS, PSS 개념

세 개의 프로세스와 공유 메모리가 존재한다고 가정합니다:

프로세스 전용 메모리 (USS) 공유 메모리
A 20MB 60MB 공유
B 30MB 60MB 공유
C 40MB 60MB 공유

USS (Unique Set Size)

해당 프로세스만 사용하는 전용 메모리

USS는 해당 프로세스만 사용하는 메모리 양입니다. (프로세스의 전용 메모리) USS 계산 시에는 다른 프로세스와 공유하는 메모리량을 포함하지 않습니다. 즉, 오직 해당 프로세스만 사용하는 전용 메모리입니다.

 

따라서 프로세스 A, B, C의 USS 값은 다음과 같습니다:

  • 프로세스A: 20MB
  • 프로세스B: 30MB
  • 프로세스C: 40MB

RSS (Resident Set Size)

USS(전용 메모리) + 공유 메모리 전체

RSS는 프로세스가 실제로 RAM에 상주시킨 물리 메모리 총량입니다. 이 총량에는 공유된 메모리를 100% 포함합니다. 즉, RSS는 프로세스가 점유한 실제 메모리의 총합입니다.

 

따라서 프로세스 A, B, C의 USS 값은 다음과 같습니다:

  • 프로세스A: 80MB (20MB + 60MB)
  • 프로세스B: 90MB (30MB + 60MB)
  • 프로세스C: 100MB (40MB + 60MB)

PSS (Proportional Set Size, 비례 집합 크기)

USS(전용 메모리) + (공유 메모리 / 공유하는 프로세스 개수)

PSS는 프로세스의 전용 메모리와 공유 메모리를 프로세스 개수에 맞게 나눈 양을 합친 값입니다. 60MB 크기의 공유 메모리를 3개의 프로세스가 공유한다면 각 프로세스는 20MB를 공유하게 됩니다. 즉, PSS는 공유 메모리를 공유하는 프로세스 수로 나누어 각 프로세스에 비례 배분한 값을 포함합니다.

따라서 프로세스 A, B, C의 USS 값은 다음과 같습니다:

  • 프로세스A: 40MB (20MB + 20MB)
  • 프로세스B: 50MB (30MB + 20MB)
  • 프로세스C: 60MB (40MB + 20MB)

 

USS, RSS, PSS 선택 가이드

RSS의 경우 프로세스의 전용 메모리와 공유 메모리의 총합을 포함하여 계산하기 때문에 실제 RAM 사용량보다 과도하게 보고합니다. 따라서 RSS 값으로 프로세스의 메모리 사용량을 판단하는 것은 적절하지 않을 수 있습니다.

 

반면에 PSS의 경우 RSS와 달리 공유 메모리 총합을 포함하는 것이 아닌, 공유하는 프로세스 개수만큼 비례하여 계산하게 됩니다. 따라서 60MB 크기의 공유 메모리를 3개의 프로세스가 공유하는 경우, 각 프로세스가 20MB 크기의 공유 메모리를 사용하는 것으로 간주합니다. 따라서 PSS는 RSS보다 정확하게 RAM 사용량을 계산한다고 할 수 있습니다.

⇒ RSS는 실제 RAM 사용량보다 과대평가될 수 있으므로 ,PSS가 더 정확합니다.

 

smem 사용해보기

Ubuntu 환경에서 smem 설치하기

$ sudo apt install smem

지표 출력하기

  • PID: 메모리를 사용하는 프로세스 ID
  • User: 프로세스를 실행한 사용자
  • Command: 프로세스를 시작한 커맨드
  • Swap: 프로세스가 사용하는 스왑 공간
  • USS, PSS, RSS
$ smem

  PID User     Command                         Swap      USS      PSS      RSS
1070858 ubuntu   /bin/bash                          0      236      636     2884
1068915 ubuntu   /bin/bash                          0      216      713     4392
1086962 ubuntu   /bin/bash                          0      732      965     4392
1101158 ubuntu   /bin/bash                          0      736      966     4384
1095053 ubuntu   /bin/bash                          0      732      967     4392
1095598 ubuntu   /bin/bash                          0      736      967     4376
$ smem -p

  PID User     Command                         Swap      USS      PSS      RSS
1070858 ubuntu   /bin/bash                      0.00%    0.00%    0.01%    0.04%
1068915 ubuntu   /bin/bash                      0.00%    0.00%    0.01%    0.06%
1086962 ubuntu   /bin/bash                      0.00%    0.01%    0.01%    0.06%
1095053 ubuntu   /bin/bash                      0.00%    0.01%    0.01%    0.06%
1101158 ubuntu   /bin/bash                      0.00%    0.01%    0.01%    0.06%
1095598 ubuntu   /bin/bash                      0.00%    0.01%    0.01%    0.05%
$ smem -k

  PID User     Command                         Swap      USS      PSS      RSS
1070858 ubuntu   /bin/bash                          0   236.0K   636.0K     2.8M
1068915 ubuntu   /bin/bash                          0   216.0K   712.0K     4.3M
1086962 ubuntu   /bin/bash                          0   732.0K   965.0K     4.3M
1095053 ubuntu   /bin/bash                          0   732.0K   966.0K     4.3M
1101158 ubuntu   /bin/bash                          0   736.0K   966.0K     4.3M
1095598 ubuntu   /bin/bash                          0   736.0K   968.0K     4.3M

지표의 합계 출력하기

  • 14는 실행 중인 프로세스 개수입니다.
  • 1은 서로 다른 사용자 개수입니다.
  • 나머지는 Swap, USS, PSS, RSS 총합입니다.
$ smem -k -t

  PID User     Command                         Swap      USS      PSS      RSS
1070858 ubuntu   /bin/bash                          0   236.0K   636.0K     2.8M
... 생략
-------------------------------------------------------------------------------
   14 1                                           0    66.5M   119.8M   252.4M
$ smem -u

User     Count     Swap      USS      PSS      RSS
ubuntu      14        0    68196   122780   258668

 


참고