이 포스팅에서는 리눅스 시스템의 정보와 성능 모니터링을 돕는 30가지의 툴들을 알아보겠습니다. 이 툴들은 다음과 같은 시스템의 성능 문제점을 찾는데 도움을 줍니다.
시스템 병목현상
디스크 (저장공간)의 병목현상
CPU와 메모리의 병목현상
네트워크의 병목현상
1. top – 프로세스 액티비티 모니터링 커맨드
top 커맨드는 리눅스 프로세스들을 보여줍니다. 다이나믹한 리얼타임 뷰를 이용해 현재 구동중인 프로세스의 내역을 볼 수 있습니다. 기본적으로 CPU를 가장 많이 소비하는 프로세스 순으로 보여주고 데이터는 5초에 한번씩 리프레시 됩니다.
top 커맨드의 핫키 (Hot Keys):
Hot Key Usage
t 요약정보를 보여주거나 숨김
m 메모리 정보를 보여주거나 숨김
A 각 시스템 리소스 분야에서 가장 많이 소비하고 있는 프로세스를 카테고리마다 보여줌
f 상단의 인터랙티브 컨픽 스크린을 활성화 함
o 순차를 변경
r renice 커맨드를 구동함 (renice는 프로세스의 priority를 지정하는 커맨드)
k kill 커맨드를 구동함
z 컬러화면을 보여주거나 숨김
2. vmstat – 가상 메모리 정보
vmstat 커맨드는 프로세스, 메모리, 페이징, 블록 IO, 트랩과 CPU 정보를 보여줍니다.
vmstat 3
출력 예제:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0
메모리 이용 정보
vmstat -m
액티브, 인액티브 메모리 페이지 정보
vmstat -a
스왑 공간을 사용하는 프로세스 정보
smem
또는
pgrep memcached
grep --color VmSwap /proc/48440/status
3. w – 로그인 한 유저와 유저가 사용하는 프로세스 정보
w 커맨드는 로그인 한 유저와 그 유저가 사용하는 프로세스 정보를 볼 수 있습니다.
w username
w vivek
출력 예제:
17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
4. uptime – 리눅스 시스템이 얼마동안 가동되고 있는지 알려주는 커맨드
서버가 얼마나 오랫동안 가동이 되고 있는지 알려주는 커맨드입니다. 현재 시간, 가동시간, 로그인한 유저수, 그리고 지난 1분, 5분, 15분 평균 시스템 로드도 보여 줍니다.
uptime
출력 예제:
18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
1의 로드 값은 최적의 값입니다. 로드 값은 시스템마다 다를 수 있습니다. 1 CPU의 시스템은 1~3, 그리고 SMP 시스템은 6~10 로드 값이 받아들일수 있는 값입니다.
5. ps – 리눅스 프로세스 정보를 보여줌
ps 커맨드를 이용하면 현재 가동되는 프로세스의 정보를 스냅샷 리포트로 볼 수 있습니다. 모든 프로세스를 보려면 -A 파라미터를 다음과 같이 입력합니다:
ps -A
출력 예제:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:02 migration/0
3 ? 00:00:01 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 migration/1
6 ? 00:00:15 ksoftirqd/1
....
.....
4881 ? 00:53:28 java
4885 tty1 00:00:00 mingetty
4886 tty2 00:00:00 mingetty
4887 tty3 00:00:00 mingetty
4888 tty4 00:00:00 mingetty
4891 tty5 00:00:00 mingetty
4892 tty6 00:00:00 mingetty
4893 ttyS1 00:00:00 agetty
12853 ? 00:00:00 cifsoplockd
12854 ? 00:00:00 cifsdnotifyd
14231 ? 00:10:34 lighttpd
14232 ? 00:00:00 php-cgi
54981 pts/0 00:00:00 vim
55465 ? 00:00:00 php-cgi
55546 ? 00:00:00 bind9-snmp-stat
55704 pts/1 00:00:00 ps
ps 커맨드는 top과 비슷하지만 더 많은 정보를 보여줍니다. 다음의 예제를 보겠습니다.
더 많은 정보 출력
ps -Al
엑스트라 풀 정보 모드 (각 프로세스에 보내어진 커맨드라인 파라미터 정보들까지 보여줌):
ps -AlF
Thread 정보 (LWP 와 NLWP)
ps -AlFH
프로세스 후 Thread 정보
ps -AlLm
모든 프로세스를 출력
ps ax
ps axu
프로세스 트리 (process tree) 정보 출력
ps -ejH
ps axjf
pstree
리눅스 프로세스 보안 정보
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
Vivek이라는 유저 이름으로 가동되는 모든 프로세스 정보
ps -U vivek -u vivek u
ps 커맨드의 출력 포맷 수정
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan
Lighttpd라는 프로세스의 Process ID 출력
ps -C lighttpd -o pid=
또는
pgrep lighttpd
또는
pgrep -u vivek php-cgi
프로세스 ID 55977의 이름
ps -p 55977 -o comm=
메모리를 가장 많이 사용하는 Top 10 프로세스
ps -auxf | sort -nr -k 4 | head -10
CPU를 가장 많이 사용하는 Top 10 프로세스
ps -auxf | sort -nr -k 3 | head -10
6. free – 리눅스 서버 메모리 사용 정보
free 커맨드는 남은 메모리, 사용되고 있는 메모리, swap 메모리, 그리고 커널이 사용하고 있는 버퍼의 총량을 보여줍니다.
free
출력 예제:
total used free shared buffers cached
Mem: 12302896 9739664 2563232 0 523124 5154740
-/+ buffers/cache: 4061800 8241096
Swap: 1052248 0 1052248
7. iostat – 평균 CPU 사용량과 디스크 활동 정보를 모니터
iostat 커맨드는 CPU와 디스크의 정보를 볼수 있습니다.
iostat
출력 예제:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
avg-cpu: %user %nice %system %iowait %steal %idle
3.50 0.09 0.51 0.03 0.00 95.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.04 31.88 512.03 16193351 260102868
sda1 0.00 0.00 0.00 2166 180
sda2 22.04 31.87 512.03 16189010 260102688
sda3 0.00 0.00 0.00 1615
8. sar – 시스템 활동을 모니터와 리포트
네트워크 카운터를 보려면:
sar -n DEV | more
실시간 사용 정보:
sar 4 5
RHEL 5 출력 예제:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:45:12 PM CPU %user %nice %system %iowait %steal %idle
06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
Average: all 2.02 0.00 0.27 0.01 0.00 97.70
9. mpstat – 멀티 프로세서 사용 정보
mpstat 커맨드는 멀티 프로세서 정보를 보여줍니다 (0번이 첫번째 프로세서)
각 프로세서당 평균 사용 정보:
mpstat -P ALL
출력 예제:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
10. pmap – 메모리 사용 정보
pmap 커맨드는 프로세스의 메모리 맵을 보여주는 커맨드입니다. 이 커맨드를 이용하면 메모리의 병목현상을 발견하는데 도움을 받을 수 있습니다.
pmap -d PID
프로세스 ID 47394의 메모리 정보를 보려면 다음의 커맨드를 입력합니다:
pmap -d 47394
출력 예제:
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
..
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
마지막 행이 가장 중요합니다:
mapped: 933712K 맵된 메모리 총량
writeable/private: 4304K 프라이빗 주소 공간의 양
shared: 768000K 다른 프로세스들과 공유되는 메모리 양
11. netstat – 네트워크 정보와 모니터링 툴
netstat 커맨드를 이용하여 네트워크 커넥션, 라우팅 테이블, 인터페이스 정보, 마스커레이드 커넥션, 멀티캐스트 멤버쉽 정보를 볼수 있습니다. 이제는 사용을 안하는 커맨드입니다. 그대신에 다음의 ss 커맨드를 이용합니다.
커멘드 예제:
netstat -tulpn
netstat -nat
12. ss – 네트워크 정보
ss 커맨드로 소켓 정보를 불러올수 있습니다. netstat과 비슷하지만 netstat은 오래된 툴이라 이제는 사용을 안합니다.
TCP 정보
ss -t -a
UDP 정보
ss -u -a
13. iptraf – 실시간 네트워크 정보
이 커맨드는 인터랙티브하면서도 컬러가 있어서 사용하기 편한 툴입니다. TCP, UDO, ICMP, OSPF, ethernet 로드, 노드, IP checksum 에러등의 유용한 정보를 볼 수 있습니다. 다음과 같은 정보가 있습니다:
TCP 커넥션에 따른 네트워크 트래픽 정보
네트워크 인터페이스에 따른 IP 트래픽 정보
프로토콜에 따른 네트워크 트래픽 정보
TCP / UDP 포트와 패킷 사이즈에 따른 네트워크 트래픽 정보
Layer2 주소에 따른 네트워크 트래픽 정보
14. tcpdump – 디테일한 네트워크 트래픽 분석
TCP/IP 프로토콜을 이해한다면 유용한 툴입니다.
DNS 트래픽 정보:
tcpdump -i eth1 'udp port 53'
포트 80의 IPv4 HTTP 패킷 정보:
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
202.54.1.5의 FTP 세션 정보:
tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'
192.168.1.5으로의 모든 HTTP 세션 정보 출력:
tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'
wireshark를 이용하여 파일 정보 출력:
tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
15. iotop – 리눅스 I/O 모니터
리눅스의 커널을 이용하여 I/O 사용 정보를 보여주는 커맨드입니다.
sudo iotop
16. htop – 인터랙티브 프로세스 뷰어
htop은 무료에 오픈소스 뷰어입니다. top 보다 사용하기 편리하고 쉽습니다.
htop
17. atop – 고급 리눅스 시스템 & 프로세스 모니터
atop은 리눅스와 유닉스 시스템의 인터랙티브하고 강력한 모니터링 툴입니다. 성능면으로 중요한 하드웨어 리소스의 정보를 보여줍니다. 쉽고 빠르게 CPU, 메모리, 디스크와 네트워크 성능을 점검할수 있습니다
atop
18. ac 와 lastcomm
로그인 활동 정보를 모니터 하는 커맨드입니다. psacct이나 acct 패키지에 있는 이 커맨드는 다음과 같은 정보를 볼 수 있습니다:
ac command : 유저의 커넥트 시간 정보
lastcomm command : 마지막으로 가동된 커맨드 정보
sa command : 어카운팅 요약 정보
19. monit – 프로세스 관리
monit은 무료에 오픈소스 소프트웨어로 프로세스 관리를 도와주는 툴입니다. 실패한 프로세스를 다시 시작할 수도 있습니다. Systemd나 daemontools등의 툴과 비슷합니다.
20. nethogs - 가장 많은 bandwidth를 사용하는 PID를 찾는 커맨드
sudo nethogs
21. iftop – bandwidth 사용 내역을 호스트 단위로 보여주는 커맨드
sudo iftop
22. vnstat – 콘솔 기반의 네트워크 트래픽 모니터
시간별, 일별 그리고 월별로 네트워크 트래픽을 기록및 저장을 하는 툴입니다.
vnstat
23. nmon – 리눅스 시스템 관리자, 튜닝과 벤치마킹 툴
nmon 는 리눅스 시스템 관리자의 튜닝 툴입니다. CPU, 메모리, 네트워크, 디스크, 파일 시스템, NFS 등의 정보를 관리합니다.
nmon
24. glances – 리눅스 관리 툴
클라이언트 / 서버 모드가 가능한 관리 툴입니다.
glances
25. strace – 시스템 서버 콜 관리
이 커맨드는 웹서버를 디버깅시에 도움이 되는 툴입니다.
26. /proc/ 파일 시스템 – 다양한 리눅스 커널 정보
/proc 파일 시스템은 디테일하고 다양한 하드웨어 정보를 볼 수 있습니다.
몇 가지 예제:
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/zoneinfo
cat /proc/mounts
27. Nagios – 리눅스 서버와 네트워크 모니터링
알림기능이 갖추어진 호스트, 네트워크 장비와 서비스를 관리할 수 있는 툴입니다.
28. Cacti – 웹 기반의 리눅스 모니터링 툴
네트워크, CPU, 메모리, 로그인 한 유저, 아파치, DNS 서버등을 웹 기반으로 관리할 수 있는 툴입니다.
29. KDE System Guard – 실시간 리눅스 시스템 리포팅과 그래핑
SSH세션을 이용하여 KDE 데스크탑을 관리할 수 있는 애플리케이션입니다. 클라이언트 / 서버 아키텍쳐이고 다양한 센서 정보를 시각화 해주는 툴입니다.
30. Gnome 리눅스 시스템 모니터
KDE System Guard 같이 파워풀하지는 않지만 유용하고 기본적인 정보를 보여주는 툴입니다.
시스템 하드웨어와 소프트웨어 정보
리눅스 커널 버전
GNOME 버전
하드웨어
설치된 메모리
프로세서와 스피드 정보
시스템 스테이터스
현재 디스크 사용량 정보
프로세스 내역
메모리와 swap space
네트워크 사용 정보
파일 시스템
참고: