콘텐츠로 이동

운영체제 디버깅 (OS Debugging)

Jan 22, 2026 · Updated Jan 27, 2026

운영체제 디버깅은 시스템의 하드웨어와 소프트웨어 오류를 찾아 수정하는 활동입니다. 프로세스 실패, 커널 충돌, 성능 저하 등 다양한 문제를 진단하고 해결하기 위한 도구와 기법이 필요하며, 성능 병목 제거를 통한 성능 튜닝도 포함됩니다.

구분프로세스 실패커널 실패
용어프로세스 실패크래시(crash)
정보 저장로그 파일, 코어 덤프로그 파일, 크래시 덤프
분석 도구디버거커널 디버깅 도구
  • 코어 덤프(core dump): 프로세스 메모리 캡처를 파일로 저장
  • 크래시 덤프(crash dump): 커널 실패 시 메모리 상태 저장
  • 커널 크래시 시 파일 시스템 코드 실패 가능성 → 파일 시스템 없는 디스크 영역에 저장 후 재부팅 시 복구

두 가지 접근법:

  1. 카운터(Counters): 커널이 유지하는 통계 값 조회
  2. 트레이싱(Tracing): 특정 이벤트에 대한 데이터 수집
범위도구설명
프로세스별ps단일/선택 프로세스 정보
프로세스별top현재 프로세스 실시간 통계
시스템 전체vmstat메모리 사용 통계
시스템 전체netstat네트워크 인터페이스 통계
시스템 전체iostat디스크 I/O 사용량
범위도구설명
프로세스별strace프로세스가 호출하는 시스템 콜 추적
프로세스별gdb소스 레벨 디버거
시스템 전체perfLinux 성능 도구 모음
시스템 전체tcpdump네트워크 패킷 수집
  • 커널 메모리에만 존재하는 “의사(pseudo)” 파일 시스템
  • 프로세스별 및 커널 통계 조회에 사용
  • 디렉토리 계층 구조: /proc/[PID]/로 프로세스별 통계 접근
  • 예: /proc/2155는 프로세스 ID 2155의 통계 포함

Linux 시스템을 위한 동적 커널 추적 도구로, eBPF(extended Berkeley Packet Filter) 프론트엔드입니다.

특징:

  • 시스템 신뢰성에 영향 없이 디버깅
  • 사용하지 않을 때 영향 없음, 사용 시 비례적 영향
  • Python 프론트엔드로 개발 용이
  • eBPF 프로그램은 C 서브셋으로 작성, 검증기(verifier) 통과 후 커널에 삽입
  • 예: disksnoop 도구로 디스크 I/O 활동 추적

Kernighan의 법칙: “디버깅은 코드를 작성하는 것보다 두 배 어렵다. 따라서 가능한 한 영리하게 코드를 작성하면, 정의상 디버깅할 만큼 똑똑하지 않은 것이다.”

실제 시나리오:

  • 프로세스 실패 시 코어 덤프 생성 → 디버거로 분석
  • strace 명령으로 시스템 콜 추적
  • /proc/2155에서 프로세스 2155 통계 확인

카운터:

  • 장점: 가벼움, 상시 사용 가능
  • 단점: 세부 이벤트 추적 불가

트레이싱:

  • 장점: 상세한 이벤트 정보
  • 단점: 성능 오버헤드 가능

BCC/eBPF:

  • 장점: 동적, 안전, 낮은 오버헤드
  • 단점: 학습 곡선, Linux 전용
  • [[시스템 콜 (System Call)]]
  • [[프로세스 (Process)]]