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
댓글