본문 바로가기

리눅스

[draft] smem 명령어

smem 명령어

smem은 Linux 시스템의 메모리 사용량을 상세하게 분석할 수 있는 도구입니다.

특히 PSS(Proportional Set Size) 개념을 사용하여 공유 메모리를 정확하게 계산할 수 있다는 장점이 있습니다.

 

일반적으로 top, ps, free 등의 명령어는 공유 메모리를 정확히 반영하지 못하지만 smem은 이를 고려하여 실제 메모리 사용량을 보다 정확하게 확인할 수 있습니다.

1. smem 설치

smem은 기본적으로 설치되어 있지 않을 수 있으므로 필요 시 설치합니다.

 

Ubuntu/Debian 계열

sudo apt-get update
sudo apt-get install smem

CentOS/RHEL/Rocky/AlmaLinux 계열

sudo yum install smem

2. 기본 사용법

smem [options]
smem
  PID User     Command                         Swap      USS      PSS      RSS
  725 root     /usr/sbin/gssproxy -D            512        4       23      700

출력 필드 설명

  • PID : 프로세스 고유 식별자
  • User : 프로세스를 실행한 사용자
  • Command : 실행된 명령어 또는 프로세스
  • Swap : 사용 중인 Swap 메모리
  • USS : Unique Set Size (해당 프로세스만 사용하는 메모리)
  • PSS : Proportional Set Size (공유 메모리를 비율로 계산한 실제 메모리 사용량)
  • RSS : Resident Set Size (현재 물리 메모리에 올라간 메모리 크기)

메모리 지표 설명

USS (Unique Set Size)

  • 해당 프로세스만 사용하는 순수 메모리

PSS (Proportional Set Size)

  • 공유 메모리를 프로세스 수로 나누어 계산한 값
  • 실제 메모리 사용량을 가장 정확하게 표현

RSS (Resident Set Size)

  • 현재 물리 메모리에 로드된 메모리
  • 공유 메모리를 중복 계산하기 때문에 실제보다 크게 보일 수 있음

주요 옵션

  • -h : 도움말 출력
  • -c : 출력할 컬럼 지정
  • -t : 전체 합계 표시
  • -w : 시스템 전체 메모리 정보
  • -u : 사용자별 메모리 사용량
  • -s : 특정 필드 기준 정렬
  • -r : 역순 정렬
  • -p : 퍼센트 표시
  • -k : 단위 축약 표시
  • --pie : 파이 그래프 출력
  • --bar : 막대 그래프 출력

도움말 확인

$ smem -help
Usage: smem [options]

Options:
  -h, --help            show this help message and exit
  -H, --no-header       disable header line
  -c COLUMNS, --columns=COLUMNS
                        columns to show
  -t, --totals          show totals
  -a, --autosize        size columns to fit terminal size
  -R REALMEM, --realmem=REALMEM
                        amount of physical RAM
  -K KERNEL, --kernel=KERNEL
                        path to kernel image
  -m, --mappings        show mappings
  -u, --users           show users
  -w, --system          show whole system
  -P PROCESSFILTER, --processfilter=PROCESSFILTER
                        process filter regex
  -M MAPFILTER, --mapfilter=MAPFILTER
                        map filter regex
  -U USERFILTER, --userfilter=USERFILTER
                        user filter regex
  -n, --numeric         numeric output
  -s SORT, --sort=SORT  field to sort on
  -r, --reverse         reverse sort
  -p, --percent         show percentage
  -k, --abbreviate      show unit suffixes
  --pie=PIE             show pie graph
  --bar=BAR             show bar graph
  -S SOURCE, --source=SOURCE
                        /proc data source

3. 사용 예시

전체 메모리 사용 요약

smem -w
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       4084812    3778796     306016 
userspace memory            3838800     233148    3605652 
free memory                 4320876    4320876          0
  • kernel dynamic memory : 커널에서 사용하는 동적 메모리
  • userspace memory : 사용자 프로세스 메모리
  • free memory : 사용 가능한 메모리

전체 프로세스 메모리 확인

smem
  PID User     Command                         Swap      USS      PSS      RSS 
  880 root     /sbin/agetty -o -p -- \u --      128        4        4        8 
186799 zabbix   /usr/sbin/zabbix_agentd -c      1248       12       59     1932 
186780 root     /usr/bin/VGAuthService          2068       12       65     2316 
186770 _chrony  /usr/sbin/chronyd -F 1           440       92      205     1696 
186804 zabbix   /usr/sbin/zabbix_agentd: ac     1112      168      288     2580 
186745 root     /usr/sbin/irqbalance --fore      252      216      337     3296 
460380 root     /usr/sbin/cron -f -P               0      280      368     2920 
186803 zabbix   /usr/sbin/zabbix_agentd: li     1048      288      444     2828 
186802 zabbix   /usr/sbin/zabbix_agentd: li     1044      296      453     2840 
186800 zabbix   /usr/sbin/zabbix_agentd: co     1196      352      455     1916 
186801 zabbix   /usr/sbin/zabbix_agentd: li     1044      300      458     2848 
186767 _chrony  /usr/sbin/chronyd -F 1           408      372      522     2960

Swap 사용량 기준 정렬

  • Swap을 많이 사용하는 프로세스를 확인합니다.
smem -rs swap
  PID User     Command                         Swap      USS      PSS      RSS 
  900 root     /usr/bin/python3 /usr/share     6788     1484     1537     2536 
  852 root     /usr/bin/python3 /usr/bin/n     6644     2308     2789     6124 
186768 root     /usr/libexec/packagekitd        2256     1168     1675     6780 
186780 root     /usr/bin/VGAuthService          2068       12       65     2316 
  867 root     /lib/systemd/systemd-logind     1324     1424     2307     5140 
186795 root     /usr/sbin/ModemManager          1252     1176     1657     6520 
186799 zabbix   /usr/sbin/zabbix_agentd -c      1248       12       59     1932 
186800 zabbix   /usr/sbin/zabbix_agentd: co     1196      352      455     1916

RSS(Remote Set Size) 기준 정렬

  • 메모리를 많이 사용하는 프로세스를 확인합니다.
smem -rs rss

특정 사용자만 확인

smem -rs rss | grep root
186790 root     /sbin/multipathd -d -s             0    23084    23512    27892 
436511 root     /usr/bin/python3 /usr/bin/s        0    17224    17785    27636 
465903 root     /usr/bin/python3 /usr/bin/s        0    14436    14760    21000 
460387 root     /lib/systemd/systemd-journa        0    10856    11908    17712 
    1 root     /lib/systemd/systemd --syst        0     3204     4706    11256 
457230 root     sshd: mtsysman [priv]              0      752     2354     9800 
460390 root     sshd: /usr/sbin/sshd -D [li        0     1632     2233     8508 
186775 root     /usr/libexec/udisks2/udisks     1192     1536     2135     7060 
186768 root     /usr/libexec/packagekitd        2256     1168     1674     6780

사용자별 메모리 사용량

smem -u
User     Count     Swap      USS      PSS      RSS 
_chrony      2      848      464      725     4656 
syslog       1      452     1168     1346     4584 
messagebus     1      308     1112     1826     3664 
zabbix       6     6692     1416     2152    14944 
systemd-network     1        0     1488     2192     7712 
root        25    24628    88116   101198   204652
  • Count : 실행 중인 프로세스 수
  • Swap : 사용자별 Swap 사용량
  • USS : 고유 메모리
  • PSS : 실제 메모리 사용량
  • RSS : 물리 메모리 사용량

4. 컬러 출력

터미널에서 색상을 지원할 경우 컬러로 출력할 수 있습니다.

smem --color=auto

5. 실시간 모니터링

일정 간격으로 결과를 갱신하여 실시간 모니터링할 수 있습니다.

smem -rt

 

smem 명령어는 다양한 옵션을 제공하여 메모리 사용에 대한 상세한 정보를 제공합니다.

 

참고URL

- Ubuntu Manpage : smem 명령어