Linux 서버에서 소프트웨어를 실행할 때, 시스템의 동작 방식과 성능을 이해하고 모니터링하는 것은 매우 중요합니다. 다양한 도구를 사용하여 운영체제, CPU, 메모리, I/O 등의 시스템 활동을 관찰하고 분석할 수 있습니다. 이러한 도구들은 시스템에 큰 부하를 주지 않으면서도 상세한 정보를 제공하여 문제 해결에 도움을 줍니다.
Brendan Gregg는 이러한 도구들을 "Linux Performance Observability Tools"로 분류하며, 기본(Basic), 중급(Intermediate), 고급(Advanced)으로 나누어 소개합니다.
1. 기본 관찰 도구 (Basic Observability Tools)
1.1. uptime
- 기능: 시스템의 현재 시간, 가동 시간, 로그인한 사용자 수, 그리고 1분, 5분, 15분 간의 시스템 로드 평균을 표시합니다.
- 사용 예시:
uptime
- 설명
- 로드 평균은 시스템의 CPU 자원에 대한 수요를 나타내며, 세 개의 숫자로 표시됩니다.
- 첫 번째 숫자: 지난 1분 간의 평균 로드
- 두 번째 숫자: 지난 5분 간의 평균 로드
- 세 번째 숫자: 지난 15분 간의 평균 로드
- 로드 평균이 시스템의 프로세서 수를 초과하면 CPU 자원에 대한 수요가 높음을 의미합니다.
- 프로세서 수 확인 방법:
lscpu
명령어를 사용하여 CPU 아키텍처 및 프로세서 수 확인nproc
명령어를 사용하여 사용 가능한 프로세서 수 확인
- 로드 평균은 시스템의 CPU 자원에 대한 수요를 나타내며, 세 개의 숫자로 표시됩니다.
1.2. top
- 기능: 실시간으로 시스템의 프로세스 정보를 표시하며, CPU 및 메모리 사용량이 높은 프로세스를 식별할 수 있습니다.
- 사용 예시:
top
- 설명
- 요약 영역: 가동 시간, 로드 평균, 실행 중인 태스크 수, CPU 상태, 메모리 사용량 등을 보여줍니다.
- 필드/컬럼 헤더: 각 프로세스의 상세 정보를 나타냅니다.
- PID: 프로세스 ID
- USER: 프로세스를 실행한 사용자 이름
- PR: 프로세스의 우선순위
- NI: 프로세스의 nice 값(우선순위 조정)
- VIRT: 가상 메모리 사용량
- RES: 실제 메모리 사용량
- SHR: 공유 메모리 사용량
- S: 프로세스 상태(R: 실행 중, S: 대기, D: 디스크 대기, Z: 좀비 등)
- %CPU: CPU 사용률
- %MEM: 메모리 사용률
- TIME+: 누적 CPU 시간
- COMMAND: 실행된 명령어나 프로세스 이름
- 상호작용 기능:
- 프로세스 정렬 변경: CPU 사용량 기준 정렬은
P
, 메모리 사용량 기준 정렬은M
키를 누릅니다. - 프로세스 종료:
k
키를 눌러 특정 프로세스를 종료할 수 있습니다. - 검색 기능:
/
키를 눌러 프로세스를 검색합니다. - 스레드 표시:
H
키를 눌러 스레드 정보를 표시합니다.
- 프로세스 정렬 변경: CPU 사용량 기준 정렬은
1.3. ps
- 기능: 현재 실행 중인 프로세스의 스냅샷을 보여줍니다.
- 사용 예시:
ps aux
: 모든 프로세스의 상세 정보를 표시합니다.ps -ef
: 프로세스의 부모-자식 관계를 확인할 수 있습니다.
- 설명
- ps aux
- USER: 프로세스 소유자
- PID: 프로세스 ID
- %CPU: CPU 사용률
- %MEM: 메모리 사용률
- VSZ: 가상 메모리 사용량
- RSS: 실제 메모리 사용량
- TTY: 터미널 타입
- STAT: 프로세스 상태
- START: 프로세스 시작 시간
- TIME: 누적 CPU 시간
- COMMAND: 실행된 명령어
- ps -ef
- UID: 프로세스 소유자 ID
- PID: 프로세스 ID
- PPID: 부모 프로세스 ID
- C: CPU 사용률
- STIME: 프로세스 시작 시간
- TTY: 터미널 타입
- TIME: 누적 CPU 시간
- CMD: 실행된 명령어
- ps aux
1.4. vmstat
- 기능: 프로세스, 메모리, 페이징, 블록 I/O, 트랩, 디스크, CPU 활동 등을 보고합니다.
- 사용 예시:
vmstat 1
(1초 간격으로 업데이트) - 설명
- 프로세스
- r: 실행 가능한 프로세스 수 (러닝 또는 런타임 대기 중)
- b: 인터럽트 불가 상태의 프로세스 수
- 메모리
- swpd: 사용 중인 가상 메모리 양
- free: 사용 가능한 메모리 양
- buff: 버퍼로 사용되는 메모리 양
- cache: 캐시로 사용되는 메모리 양
- 스왑
- si: 디스크로부터 스왑된 메모리 양 (KB 단위)
- so: 디스크로 스왑된 메모리 양 (KB 단위)
- 스왑 활동이 있으면 메모리 부족을 의미할 수 있습니다.
- I/O
- bi: 블록 입력량 (KB 단위)
- bo: 블록 출력량 (KB 단위)
- 시스템
- in: 초당 인터럽트 수
- cs: 초당 컨텍스트 스위치 수
- CPU
- us: 사용자 모드에서의 CPU 사용률
- sy: 시스템 모드에서의 CPU 사용률
- id: 유휴 시간 비율
- wa: I/O 대기 시간 비율
- 프로세스
1.5. iostat
- 기능: CPU 통계와 디스크 I/O 통계를 보고합니다.
- 사용 예시:
iostat -x 1
(1초 간격으로 확장 통계 표시) - 설명
- CPU 통계
- %user: 사용자 수준에서의 CPU 사용률
- %system: 시스템 수준에서의 CPU 사용률
- %iowait: I/O 대기 시간 비율
- %idle: 유휴 시간 비율
- 디스크 통계
- Device: 디스크 장치 이름
- tps: 초당 전송 요청 수
- kB_read/s: 초당 읽은 킬로바이트 수
- kB_wrtn/s: 초당 기록한 킬로바이트 수
- await: I/O 요청의 평균 대기 시간 (ms 단위)
- %util: 디스크 사용률 (100%에 가까울수록 디스크가 바쁨을 의미)
- CPU 통계
1.6. free
- 기능: 시스템의 사용 가능한 메모리와 사용 중인 메모리를 표시합니다.
- 사용 예시:
free -m
(메가바이트 단위로 표시) - 설명
- Mem
- total: 총 물리적 메모리 양
- used: 사용 중인 메모리 양
- free: 사용 가능한 메모리 양
- shared: 공유 메모리 양
- buff/cache: 버퍼 및 캐시로 사용되는 메모리 양
- available: 새로운 프로세스가 사용할 수 있는 메모리 양
- Swap
- total: 총 스왑 메모리 양
- used: 사용 중인 스왑 메모리 양
- free: 사용 가능한 스왑 메모리 양
- Mem
2. 중급 관찰 도구 (Intermediate Observability Tools)
2.1. pidstat
- 기능: 개별 프로세스의 CPU, 메모리, I/O, 스택, 페이지 폴트 등의 통계를 모니터링합니다.
- 사용 예시
- CPU 사용량:
pidstat -u 1
- 메모리 사용량:
pidstat -r 1
- I/O 활동:
pidstat -d 1
- CPU 사용량:
- 설명
- CPU 사용량 보고 (-u 옵션):
- %usr: 사용자 모드에서의 CPU 사용률
- %system: 시스템 모드에서의 CPU 사용률
- %CPU: 전체 CPU 사용률
- 메모리 사용량 보고 (-r 옵션):
- minflt/s: 초당 발생한 소프트 페이지 폴트 수
- majflt/s: 초당 발생한 하드 페이지 폴트 수
- VSZ: 가상 메모리 사용량
- RSS: 실제 메모리 사용량
- I/O 활동 보고 (-d 옵션):
- kB_rd/s: 초당 읽은 킬로바이트 수
- kB_wr/s: 초당 기록한 킬로바이트 수
- iodelay: 블록 I/O 지연 시간
- CPU 사용량 보고 (-u 옵션):
2.2. nicstat
- 기능: 네트워크 인터페이스의 입출력 통계를 모니터링합니다.
- 사용 예시:
nicstat 1
(1초 간격으로 업데이트) - 설명
- Int: 네트워크 인터페이스 이름
- rKB/s: 초당 수신한 킬로바이트 수
- wKB/s: 초당 전송한 킬로바이트 수
- %Util: 네트워크 인터페이스의 사용률
- Sat: 네트워크 포화 상태 지표 (에러 발생률)
2.3. netstat
- 기능: 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 멀티캐스트 멤버십 등을 표시합니다.
- 사용 예시
- 모든 TCP 연결 보기:
netstat -at
- 청취 중인 포트 보기:
netstat -tln
- 프로세스와 연결된 소켓 보기:
sudo netstat -atp
- 모든 TCP 연결 보기:
- 설명
- Proto: 프로토콜 (tcp, udp 등)
- Recv-Q: 수신 대기열의 바이트 수
- Send-Q: 전송 대기열의 바이트 수
- Local Address: 로컬 주소와 포트
- Foreign Address: 원격 주소와 포트
- State: 소켓 상태 (LISTEN, ESTABLISHED 등)
- PID/Program name: 프로세스 ID와 이름
2.4. lsof
- 기능: 시스템에서 열린 파일과 네트워크 연결을 나열합니다.
- 사용 예시
- 모든 열린 파일 보기:
lsof
- 특정 프로세스의 열린 파일 보기:
lsof -p [PID]
- 네트워크 연결된 파일 보기:
lsof -i
- 모든 열린 파일 보기:
- 설명
- COMMAND: 프로세스 이름
- PID: 프로세스 ID
- USER: 사용자 이름
- FD: 파일 디스크립터 (cwd, txt 등 특별한 값 포함)
- TYPE: 파일 타입 (REG, DIR, CHR 등)
- DEVICE: 장치 번호
- SIZE/OFF: 파일 크기 또는 오프셋
- NODE: 파일의 노드 번호
- NAME: 파일 이름 또는 네트워크 주소
2.5. sar
- 기능: 시스템의 다양한 성능 지표를 장기간 모니터링하고 보고합니다.
- 사용 예시
- CPU 사용량:
sar -u 1 3
- 메모리 사용량:
sar -r 1 3
- 네트워크 활동:
sar -n DEV 1 3
- 디스크 활동:
sar -d 1 3
- CPU 사용량:
- 설명
- sar는 시스템 활동을 일정 간격으로 기록하며,
/var/log/sysstat/
디렉터리에 저장합니다. - 옵션
-u
: CPU 사용량 보고-r
: 메모리 사용량 보고-d
: 디스크 I/O 활동 보고-n
: 네트워크 활동 보고-q
: 시스템 로드 및 런큐 길이 보고-b
: I/O 및 전송률 통계 보고
- 데이터 수집 활성화
/etc/default/sysstat
파일에서ENABLED="true"
로 설정sudo service sysstat restart
명령어로 서비스 재시작
- 과거 데이터 조회
- 특정 날짜의 데이터를 조회하려면
-f
옵션을 사용하여 데이터 파일 지정 - 예:
sar -f /var/log/sysstat/sa10
(10일의 데이터 조회)
- 특정 날짜의 데이터를 조회하려면
- sar는 시스템 활동을 일정 간격으로 기록하며,
3. 고급 관찰 도구 (Advanced Observability Tools)
3.1. ss
- 기능: 소켓 통계를 표시하며,
netstat
의 대체 도구로 더 빠르고 상세한 정보를 제공합니다. - 사용 예시
- 모든 TCP 연결 보기:
ss -t -a
- 프로세스와 연결된 소켓 보기:
ss -p -a
- 청취 중인 포트 보기:
ss -tln
- 모든 TCP 연결 보기:
- 설명
- 옵션
-t
: TCP 소켓 표시-u
: UDP 소켓 표시-a
: 모든 소켓 표시 (청취 중인 소켓 포함)-l
: 청취 중인 소켓만 표시-p
: 프로세스 정보 표시-n
: 주소 및 포트를 숫자 형식으로 표시
- 출력 필드
- Netid: 네트워크 프로토콜 ID
- State: 소켓 상태
- Recv-Q / Send-Q: 수신/전송 대기열의 바이트 수
- Local Address:Port: 로컬 주소와 포트
- Peer Address:Port: 원격 주소와 포트
- Process: 프로세스 정보
- 옵션
3.2. mpstat
- 기능: 각 CPU 코어별로 CPU 사용량을 모니터링합니다.
- 사용 예시:
mpstat -P ALL 1
(1초 간격으로 모든 CPU의 사용량 표시) - 설명
- CPU: CPU 번호 (ALL은 전체 평균)
- %usr: 사용자 모드에서의 CPU 사용률
- %nice: 낮은 우선순위 프로세스에서의 CPU 사용률
- %sys: 시스템 모드에서의 CPU 사용률
- %iowait: I/O 대기 시간 비율
- %irq: 하드웨어 인터럽트 서비스 시간 비율
- %soft: 소프트웨어 인터럽트 서비스 시간 비율
- %steal: 하이퍼바이저에 의해 훔쳐진 시간 비율
- %idle: 유휴 시간 비율
3.3. swapon
- 기능: 활성화된 스왑 공간의 사용 현황을 표시합니다.
- 사용 예시:
swapon -s
또는swapon
- 설명
- Filename: 스왑 장치 또는 파일의 이름
- Type: 스왑의 유형 (파티션 또는 파일)
- Size: 총 스왑 크기
- Used: 사용 중인 스왑 크기
- Priority: 스왑 우선순위 (숫자가 클수록 낮은 우선순위)
Linux 성능 관찰 도구들은 시스템 관리자나 개발자가 시스템의 상태를 모니터링하고 문제를 진단하는 데 필수적입니다. 각 도구는 시스템의 특정 영역에 대한 상세한 정보를 제공하며, 함께 사용하면 전체적인 시스템 성능을 종합적으로 분석할 수 있습니다.
- 시스템 로드 및 CPU 사용량 모니터링:
uptime
,top
,vmstat
,mpstat
,sar -u
- 프로세스 및 메모리 관리:
top
,ps
,pidstat
,free
,sar -r
- 디스크 및 I/O 성능 모니터링:
iostat
,vmstat
,sar -d
,sar -b
- 네트워크 활동 모니터링:
netstat
,ss
,nicstat
,sar -n
- 스왑 공간 관리:
swapon
,free
,sar -S
- 파일 및 소켓 관리:
lsof
,ss
각 도구의 상세한 사용법과 옵션은 해당 도구의 매뉴얼 페이지(man
명령어)를 통해 확인할 수 있으며, 시스템 환경에 맞게 적절히 활용하는 것이 중요합니다. 또한 도구들의 업데이트에 따라 새로운 기능이나 변경 사항을 주기적으로 확인하여 최신 정보를 반영하는 것이 좋습니다.
이러한 도구들을 활용하여 시스템의 성능 문제를 사전에 예방하고, 발생한 문제를 신속하게 해결할 수 있습니다.
728x90
댓글