본문 바로가기
Linux

Linux 메모리 확인 방법들

by 루에 2019. 4. 11.
반응형

1.top

개인적으로 많은 용도로 가장 빈번하게 활용하고 있습니다.^^; 
총 메모리 사용량을 모니터링하는데 주로 사용하는데, 프로세스 당 메모리와 CPU사용량도 보여줍니다. 아래 설명할 free 명령어처럼 buffer와 cache 정보도 확인할 수 있습니다.
여기서 짚고 넘어가야 할 것은, 기본적으로 리눅스는 가장 빠른 성능을 위해 실행 중인 프로세스들이 요청하는 메모리를 제외한 메모리들 중 거의 대부분을 Disk cache로 사용한다는 점이다.
top 명령어를 실행해 보면 이를 알 수 있는데, Mem영역의 free 메모리 사이즈보다 Swap영역의 cached Mem 사이즈가 훨씬 큰 것을 볼 수 있다.
명령어를 실행하면 실시간 모니터링이 되는데, 옵션 키들을 사용할 수 있다.
shift + m - 메모리 사용량 우선순위 정렬
shift + p - CPU 사용량 우선순위 정렬
shift + t - 실행 시간 우선순위 정렬
shift + b -  상단 정보를 블럭 형태로 표시(htop과 유사)
1 - CPU 개수별 사용량
space bar - Refresh
u - 해당 유저의 프로스세만 표시
k - 해당 프로세스 kill


예)
top - 12:36:47 up 7 days,  5:55,  4 users,  load average: 1.40, 1.16, 1.03
Tasks: 222 total,   2 running, 219 sleeping,   0 stopped,   1 zombie
%Cpu(s):  7.5 us, 15.7 sy,  0.2 ni, 76.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  12286940 total, 12027384 used,   259556 free,   415392 buffers
KiB Swap: 10239996 total,      240 used, 10239756 free.  1674928 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                 
 2111 mingyu.+  20   0 1482888 112584  59068 S  19.2  0.9   1534:59 compiz      
...

전체 물리 메모리 : 12286940 total (:=실 가용 메모리 + 실 사용 메모리)
실 가용 메모리 = free + buffers + cached Mem 
: 259556 free + 415392 buffers + 1674928 cached Mem
실 사용 메모리 = used - (buffers + cached Mem) 
: 12027384 used - (415392 buffers + 1674928 cached Mem)

2. htop

top 명령어의 또 다른 버전(???)!
개인적으로 잘 쓰지 않는데, 그 이유는 따로 설치를 해야하는 Util 명령어이다. 
하지만 취향에 따라 자주 이용하는 사람들도 있으니 한번 테스트해보시고 판단해보시길^^;
조금 더 다양한 옵션이 있으니 활용해 보시길^^;

3. free

메모리 사용량을 확인할 때 사용하는 가장 단순하고 쉬운 명령어.
커널에서 사용하는 공유메모리/버퍼 양 표시
-/+ buffers/cache: 현재 cache 메모리에서 버퍼링된 사용량

-m : MB단위로 데이터 표시
-b : byte단위로 데이터 표시
-k : kilo byte 단위로 데이터 표시
-t : 맨 마지막에 total 량 표시
-o : buffer/cache 표시 안함
-s : 지정한 초단위(Regular interval)로 refresh
-l : low & High 메모리 크기 통계
-V : free명령의 버전 표시

예) free -m
                        total       used       free     shared    buffers     cached
Mem:         11998      11646        352         73        369       1581
-/+ buffers/cache:       9695       2303
Swap:         9999          0       9999

전체 물리 메모리 : 11998 MB (:=실 가용 메모리 + 실 사용 메모리)
실 가용 메모리 2303 MB(free) = free + buffers + cached Mem 
: 352 MB(free) + 369 MB(buffers) + 1581 MB(cached Mem)
실 사용 메모리 9695 MB(used) = used - (buffers + cached Mem) 
: 11646 MB(used) - (369 MB:buffers + 1581 MB cached Mem)

참고) from zetawiki
MEM_TOTAL=`free | grep ^Mem | awk '{print $2}'` 
MEM_FREE1=`free | grep ^Mem | awk '{print $4}'` 
MEM_FREE2=`free | grep ^-/+ | awk '{print $4}'` 
MEM_NOMINAL=`echo "100-(100*$MEM_FREE1/$MEM_TOTAL)" | bc -l` 
MEM_ACTUAL=`echo "100-(100*$MEM_FREE2/$MEM_TOTAL)" | bc -l` 
echo NOMINAL=${MEM_NOMINAL:0:5}% ACTUAL=${MEM_ACTUAL:0:5}%

4. vmstat -s

아래에서 다룰 proc 명령어와 같이 메모리 사용량 통계를 나타낸다.
예)
     12286940 K total memory
     11925908 K used memory
      3084736 K active memory
      1780388 K inactive memory
       361032 K free memory
       378504 K buffer memory
      1619516 K swap cache
     10239996 K total swap
          240 K used swap
     10239756 K free swap
     18765788 non-nice user cpu ticks
       222821 nice user cpu ticks
     34041747 system cpu ticks
    196753601 idle cpu ticks
       137429 IO-wait cpu ticks
          817 IRQ cpu ticks
        27674 softirq cpu ticks
            0 stolen cpu ticks
     29867564 pages paged in
     71060804 pages paged out
            0 pages swapped in
           61 pages swapped out
   1121367295 interrupts
   2630490277 CPU context switches
   1456695684 boot time
        34179 forks


5. /proc/meminfo

/proc/meminfo 파일을 읽으면 아래와 같이 vmstat -s, free 명령어와 유사한 메모리 사용량을 확인할 수 있다. 단, /proc 파일 시스템은 실제 파일이 아니라 커널과 시스템에 대한 동적인 정보를 담고 있는 가상 파일이다.
예) cat /proc/meminfo
MemTotal:       12286940 kB
MemFree:          354672 kB
Buffers:          378504 kB
Cached:          1619800 kB
SwapCached:            0 kB
Active:          3092044 kB
Inactive:        1779796 kB
Active(anon):    2097608 kB
Inactive(anon):   851532 kB
Active(file):     994436 kB
Inactive(file):   928264 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:      10239996 kB
SwapFree:       10239756 kB
Dirty:              1164 kB
Writeback:             0 kB
AnonPages:       2873720 kB
Mapped:          6757036 kB
Shmem:             75504 kB
Slab:             488308 kB
SReclaimable:     393892 kB
SUnreclaim:        94416 kB
KernelStack:        5968 kB
PageTables:        51824 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    16383464 kB
Committed_AS:   13987488 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      160940 kB
VmallocChunk:   34359492360 kB
HardwareCorrupted:     0 kB
AnonHugePages:   1406976 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       92416 kB
DirectMap2M:    12472320 kB

(참고)
프로세스의 PID를 알고 있다면
> cat /proc/"PID"/status 입력 시
VmSize : 전체 할당된 가상 메모리 크기
VmRSS : 실제 물리 메모리가 할당된 크기
VmLck : Swapout될 수 없는 메모리 크기
VmData : Heap 영역
VmStk : Stack 영역
VmExe :  실행코드 영역 (전역변수/실행코드)
VmLib : 동적 연결된 라이브러리 영역

C Code )
char cmd[1024];
sprintf(cmd, "/proc/%d/status", getpid();
FILE* fp = fopen(cmd, "r");
if(fp == NULL) return;

int nVmSize =0;
int nVmRss =0;

while(fgets(cmd, 1024, fp) != NULL) {
  if(strstr(cmd, "VmSize"))  {
    char t[32];
    char size[32];
    sscanf(cmd, "%s%s", t, size);
    nVmSize = atoi(size);
  } else if(strstr(cmd, "VmRSS")) {
    char t[32];
    char size[32];
    sscanf(cmd, "%s%s", t, size);
    nVmRss = atoi(size);
    break;
  }
fclose(fp);

6. ps

> ps -ef --sort -rss
rss(Resident Set Size) : 물리 메모리를 실제 점유하고 있는 크기
가장 위에 있는 프로세스가 물리 메모리를 가장 많이 점유하고 있음!

> ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -rss | head -n 11
예)
USER       PID  PPID   RSS  SIZE    VSZ %MEM %CPU     TIME COMMAND
mingyu.+  4885  4860 6622604 1662480 8779996 53.8 54.1 3-23:01:30 VirtualBox
mingyu.+ 10870  1771 955232 2542152 3321996  7.7 10.0 12:45:13 firefox
mingyu.+  5824  5821 895860 4640832 5418932  7.2 1.6 02:54:53 java
mingyu.+  2235  1771 235232 592760 1280776  1.9 0.0 00:08:27 thunderbird
mingyu.+ 31928  1771 215452 1913348 2753128  1.7 0.0 00:00:19 software-center
...

7. dmidecode

설치된 RAM 하드웨어 정보 표시.
type 17이 RAM. (그 외 L1/L2 cache 등)
예) dmidecode -t 17
# dmidecode 2.12
SMBIOS 2.7 present.
Handle 0x001A, DMI type 17, 34 bytes
Memory Device
 Array Handle: 0x0019
 Error Information Handle: 0x001C
 Total Width: 64 bits
 Data Width: 64 bits
 Size: 8192 MB
 Form Factor: SODIMM
 Set: None
 Locator: ChannelA-DIMM0
 Bank Locator: BANK 0
 Type: DDR3
 Type Detail: Synchronous
 Speed: 1333 MHz
 Manufacturer: Samsung
 Serial Number: 2343574B
 Asset Tag: 0123456789
 Part Number: M471B1G73BH0-CH9  
 Rank: Unknown
 Configured Clock Speed: 1333 MHz


8. GUI Tools

gnome - gnome-system-monitor
KDE - ksysguard 

 

 

출처 : https://m.blog.naver.com/jayeonsaram/220647978281

반응형

댓글