운영체제 디버깅 (OS Debugging)
Jan 22, 2026 · Updated Jan 27, 2026
핵심 개념
섹션 제목: “핵심 개념”운영체제 디버깅은 시스템의 하드웨어와 소프트웨어 오류를 찾아 수정하는 활동입니다. 프로세스 실패, 커널 충돌, 성능 저하 등 다양한 문제를 진단하고 해결하기 위한 도구와 기법이 필요하며, 성능 병목 제거를 통한 성능 튜닝도 포함됩니다.
실패 분석 (Failure Analysis)
섹션 제목: “실패 분석 (Failure Analysis)”| 구분 | 프로세스 실패 | 커널 실패 |
|---|---|---|
| 용어 | 프로세스 실패 | 크래시(crash) |
| 정보 저장 | 로그 파일, 코어 덤프 | 로그 파일, 크래시 덤프 |
| 분석 도구 | 디버거 | 커널 디버깅 도구 |
코어 덤프와 크래시 덤프
섹션 제목: “코어 덤프와 크래시 덤프”- 코어 덤프(core dump): 프로세스 메모리 캡처를 파일로 저장
- 크래시 덤프(crash dump): 커널 실패 시 메모리 상태 저장
- 커널 크래시 시 파일 시스템 코드 실패 가능성 → 파일 시스템 없는 디스크 영역에 저장 후 재부팅 시 복구
성능 모니터링과 튜닝
섹션 제목: “성능 모니터링과 튜닝”두 가지 접근법:
- 카운터(Counters): 커널이 유지하는 통계 값 조회
- 트레이싱(Tracing): 특정 이벤트에 대한 데이터 수집
Linux 도구
섹션 제목: “Linux 도구”카운터 기반 도구
섹션 제목: “카운터 기반 도구”| 범위 | 도구 | 설명 |
|---|---|---|
| 프로세스별 | ps | 단일/선택 프로세스 정보 |
| 프로세스별 | top | 현재 프로세스 실시간 통계 |
| 시스템 전체 | vmstat | 메모리 사용 통계 |
| 시스템 전체 | netstat | 네트워크 인터페이스 통계 |
| 시스템 전체 | iostat | 디스크 I/O 사용량 |
트레이싱 도구
섹션 제목: “트레이싱 도구”| 범위 | 도구 | 설명 |
|---|---|---|
| 프로세스별 | strace | 프로세스가 호출하는 시스템 콜 추적 |
| 프로세스별 | gdb | 소스 레벨 디버거 |
| 시스템 전체 | perf | Linux 성능 도구 모음 |
| 시스템 전체 | tcpdump | 네트워크 패킷 수집 |
/proc 파일 시스템
섹션 제목: “/proc 파일 시스템”- 커널 메모리에만 존재하는 “의사(pseudo)” 파일 시스템
- 프로세스별 및 커널 통계 조회에 사용
- 디렉토리 계층 구조:
/proc/[PID]/로 프로세스별 통계 접근 - 예:
/proc/2155는 프로세스 ID 2155의 통계 포함
BCC (BPF Compiler Collection)
섹션 제목: “BCC (BPF Compiler Collection)”Linux 시스템을 위한 동적 커널 추적 도구로, eBPF(extended Berkeley Packet Filter) 프론트엔드입니다.
특징:
- 시스템 신뢰성에 영향 없이 디버깅
- 사용하지 않을 때 영향 없음, 사용 시 비례적 영향
- Python 프론트엔드로 개발 용이
- eBPF 프로그램은 C 서브셋으로 작성, 검증기(verifier) 통과 후 커널에 삽입
- 예: disksnoop 도구로 디스크 I/O 활동 추적
Kernighan의 법칙: “디버깅은 코드를 작성하는 것보다 두 배 어렵다. 따라서 가능한 한 영리하게 코드를 작성하면, 정의상 디버깅할 만큼 똑똑하지 않은 것이다.”
실제 시나리오:
- 프로세스 실패 시 코어 덤프 생성 → 디버거로 분석
strace명령으로 시스템 콜 추적/proc/2155에서 프로세스 2155 통계 확인
장단점
섹션 제목: “장단점”카운터:
- 장점: 가벼움, 상시 사용 가능
- 단점: 세부 이벤트 추적 불가
트레이싱:
- 장점: 상세한 이벤트 정보
- 단점: 성능 오버헤드 가능
BCC/eBPF:
- 장점: 동적, 안전, 낮은 오버헤드
- 단점: 학습 곡선, Linux 전용
관련 개념
섹션 제목: “관련 개념”- [[시스템 콜 (System Call)]]
- [[프로세스 (Process)]]