서버가 느려졌을 때 디스크, CPU·메모리, 네트워크 중 어디가 병목인지 찾는 데 쓰는 명령어와 도구를 정리했다.
1. top – 실시간 프로세스 현황
CPU, 메모리를 많이 쓰는 프로세스를 실시간으로 보여 준다. 기본 3초마다 갱신된다.
| 키 | 기능 |
|---|---|
P / M |
CPU 사용량 순 / 메모리 사용량 순으로 정렬 |
t |
CPU 요약 줄 표시 방식 바꾸기 |
m |
메모리 요약 줄 표시 방식 바꾸기 |
1 |
CPU 코어별로 나눠 보기 |
f |
표시할 항목과 정렬 기준 고르기 |
r |
renice (우선순위 변경) |
k |
kill (프로세스 종료) |
z |
컬러 / 흑백 전환 |
2. vmstat – 프로세스, 메모리, 스왑, I/O, CPU
|
1 2 3 |
vmstat 3 # 3초마다 출력 vmstat -m # 커널 slab 메모리 사용량 vmstat -a # 활성 / 비활성 메모리 |
r(실행 대기 프로세스)가 CPU 코어 수보다 계속 많으면 CPU 병목, si/so(스왑 입출력)가 0 이 아니면 메모리 부족, wa(I/O 대기)가 높으면 디스크 병목을 의심한다.
3. w – 로그인한 사용자와 하는 일
|
1 2 |
w w username |
4. uptime – 가동 시간과 평균 부하
|
1 2 |
$ uptime 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00 |
load average 는 1분, 5분, 15분 평균이다. CPU 코어 수보다 작으면 여유가 있고, 코어 수를 계속 넘으면 대기하는 작업이 쌓이고 있다는 뜻이다. 코어 수는 nproc 으로 확인한다.
5. ps – 프로세스 목록
|
1 2 3 4 5 6 7 8 9 10 11 |
ps -ef # 전체 프로세스 ps aux # 사용자, CPU%, 메모리% 포함 ps -AlF # 자세히 (실행 인자 포함) ps -AlFH # 스레드까지 ps axjf # 트리 형태 (pstree 도 같음) ps -U vivek -u vivek u # 특정 사용자의 프로세스 ps -C lighttpd -o pid= # 이름으로 PID 찾기 (pgrep lighttpd 와 같음) ps -p 55977 -o comm= # PID 로 이름 찾기 ps aux --sort=-%mem | head -10 # 메모리 많이 쓰는 10개 ps aux --sort=-%cpu | head -10 # CPU 많이 쓰는 10개 |
출력 항목은 -o 로 고른다. (예: ps -eo pid,user,pcpu,pmem,stat,comm)
6. free – 메모리 사용량
|
1 |
free -h |
리눅스는 남는 메모리를 캐시로 쓰기 때문에 free 값이 작아도 문제가 아니다. 실제로 쓸 수 있는 양은 available 열을 본다.
7. iostat – CPU 와 디스크 I/O
|
1 |
iostat -x 2 # 2초마다 장치별 상세 통계 |
%util 이 100% 에 가깝거나 await(평균 대기 시간)이 크면 디스크가 병목이다. (sysstat 패키지)
8. sar – 시스템 활동 기록과 조회
|
1 2 3 |
sar 4 5 # 4초 간격으로 5번 CPU 사용량 sar -n DEV | more # 네트워크 인터페이스 통계 sar -r # 메모리 |
sysstat 수집을 켜 두면 지난 기록도 조회할 수 있어서, 문제가 났던 시간대의 상태를 나중에 확인할 때 쓴다.
9. mpstat – CPU 별 사용량
|
1 |
mpstat -P ALL 2 |
특정 코어 하나만 100% 이면 단일 스레드 프로그램이 병목인 경우가 많다.
10. pmap – 프로세스 메모리 지도
|
1 |
pmap -d 47394 |
마지막 줄의 mapped(매핑된 전체), writeable/private(그 프로세스만 쓰는 양), shared(다른 프로세스와 공유하는 양)를 보고 메모리를 실제로 얼마나 쓰는지 판단한다.
11. ss, netstat – 네트워크 연결
|
1 2 3 |
ss -tulpn # 열려 있는 포트와 프로세스 ss -s # 소켓 요약 netstat -tulpn # 같은 내용 (예전 명령, net-tools 패키지) |
12. iptraf-ng – 실시간 네트워크 통계
ncurses 화면으로 TCP 연결별, 인터페이스별, 프로토콜별, 포트·패킷 크기별 트래픽을 보여 준다. 지금 배포판의 패키지 이름은 iptraf-ng 다.
13. tcpdump – 패킷 캡처
|
1 2 3 4 5 6 |
tcpdump -i eth1 'udp port 53' # DNS tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20)' # 특정 서버로 가는 FTP tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http' tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' # 데이터가 있는 HTTP 패킷만 tcpdump -n -i eth1 -s 0 -w capture.pcap port 80 # 파일로 저장 → Wireshark 로 열기 |
14. strace – 시스템 호출 추적
|
1 2 |
strace -p PID # 실행 중인 프로세스에 붙기 strace -c -p PID # 시스템 호출 통계 |
프로세스가 멈춰 있을 때 무엇을 기다리는지(파일, 네트워크, 잠금) 확인할 때 쓴다.
15. /proc – 커널이 보여 주는 정보
|
1 2 3 4 |
cat /proc/cpuinfo cat /proc/meminfo cat /proc/zoneinfo cat /proc/mounts |
16. lsof – 열려 있는 파일
프로세스가 열고 있는 파일, 소켓, 파이프, 장치를 보여 준다. 디스크를 언마운트할 때 “사용 중” 오류가 나면 어떤 프로세스가 잡고 있는지 찾는 데 쓴다.
|
1 2 3 4 |
lsof /data # /data 를 쓰고 있는 프로세스 lsof -p PID # 특정 프로세스가 연 파일 lsof -i :80 # 80 포트를 쓰는 프로세스 lsof +L1 # 지웠지만 아직 열려 있어 공간을 차지하는 파일 |
17. htop – top 의 개선판
top 과 같은 정보를 색과 막대그래프로 보여 주고, 화살표로 프로세스를 골라 종료·우선순위 변경을 할 수 있다. 트리 보기(F5)와 검색(F3)도 된다. (apt install htop)
18. iotop – 프로세스별 디스크 I/O
어떤 프로세스가 디스크를 읽고 쓰는지 실시간으로 보여 준다. iostat 으로 디스크 병목을 확인한 뒤 원인 프로세스를 찾을 때 쓴다.
|
1 |
sudo iotop -o # 지금 I/O 가 있는 프로세스만 |
19. nethogs, iftop, vnstat – 네트워크 대역폭
|
1 2 3 4 |
sudo nethogs eth0 # 프로세스별 대역폭 sudo iftop -i eth0 # 호스트(출발지·목적지)별 대역폭 vnstat -d # 일별 송수신량 (vnstat 데몬이 계속 기록) vnstat -m # 월별 |
vnstat 기록은 vnStat PHP 같은 웹 화면으로 그래프를 볼 수도 있다.
20. psacct(acct) – 사용자 활동 기록
사용자별로 어떤 명령을 실행했고 자원을 얼마나 썼는지 백그라운드에서 기록한다. (Debian/Ubuntu 패키지는 acct, RHEL 계열은 psacct)
|
1 2 3 |
ac -d # 일별 접속 시간 sa -u # 사용자별 실행 명령 lastcomm user # 특정 사용자가 실행한 명령 |
21. arpwatch, Suricata – 네트워크 보안 감시
arpwatch 는 네트워크의 IP·MAC 주소 짝이 바뀌는 것을 기록하고 메일로 알려 줘서 ARP 스푸핑을 찾는 데 쓴다. Suricata 는 OISF 가 만든 오픈소스 침입 탐지·방지 시스템(IDS/IPS)이다.
22. 모니터링 시스템
- Nagios: 서버, 네트워크 장비, 서비스를 감시하다가 이상이 생기거나 복구되면 알림을 보낸다.
- Cacti: RRDTool 로 네트워크, CPU, 메모리, 웹 서버 등의 수치를 모아 그래프로 보여 준다.
- Monit: Apache, MySQL, Nginx, SSH 같은 서비스와 파일, 파일시스템을 감시하다가 문제가 생기면 자동으로 재시작하거나 알린다. 웹 화면도 있다.
- Monitorix: 내장 웹 서버로 부하, 메모리, 디스크 상태, 서비스, 메일, MySQL 통계 등을 그래프로 보여 주는 가벼운 도구다.
- 요즘은 Prometheus + Grafana, Zabbix 같은 도구도 많이 쓴다.
참고한 자료: nixCraft – Linux Performance Monitoring Tools, iprize 번역, Tecmint – Command Line Tools to Monitor Linux Performance
관련 글: server monitoring tools, Load Avg, nmon 옵션

Leave a Reply