커널 패닉부터 eBPF까지: 커널 디버깅과 성능 분석

커널 패닉과 크래시 덤프 분석, DTrace·SystemTap·eBPF 기반 동적 추적, perf 성능 프로파일링으로 커널 문제를 진단하는 방법을 정리한다.

2026-08-14 · 최초 발행 2026-01-16

장애 원인은 패닉 메시지와 덤프에서 시작된다

커널 디버깅은 운영체제 커널에서 복구할 수 없는 오류나 성능 저하의 원인을 추적하는 작업이다. 커널 패닉 분석, 동적 추적, 성능 프로파일링은 시스템의 안정성과 성능을 다루는 핵심 수단이다.

커널 패닉은 커널 수준에서 복구 불가능한 오류가 발생해 시스템이 중단되는 상황이다. 하드웨어 결함, 드라이버 오류, 메모리 손상 등이 원인이 될 수 있으며, Panic 메시지와 스택 트레이스가 원인 파악의 단서가 된다. 이는 시스템 안정성을 위한 안전 장치이기도 하다.

커널 패닉하드웨어 패닉소프트웨어 패닉드라이버 패닉메모리 오류CPU 과열NULL 포인터 참조스택 오버플로우디바이스 드라이버 버그커널 모듈 충돌시스템 재부팅

하드웨어 패닉에는 MCE(Machine Check Exception)와 메모리 ECC 오류가 포함된다. 소프트웨어 쪽에서는 Oops, BUG(), NULL 포인터 역참조가 발생할 수 있다. 파일시스템 손상이나 저널 오류는 파일시스템 패닉으로, 네트워크 스택 오류는 네트워크 패닉으로 이어질 수 있다.

크래시가 발생했을 때는 kdump로 메모리 덤프를 저장하고, kexec를 사용해 덤프 커널을 빠르게 부팅할 수 있다. 이렇게 생성한 vmcore 파일은 보관 대상이며, 덤프 크기와 압축 설정도 함께 고려한다.

vmcore 파일crash 유틸리티스택 트레이스 확인메모리 상태 분석커널 로그 추출오류 지점 파악근본 원인 분석패치 적용

vmcore는 crash 유틸리티로 분석한다. bt(backtrace) 명령은 호출 스택을 추적하고, log 명령은 커널 메시지 버퍼를 확인하며, ps 명령은 프로세스 상태를 조사하는 데 쓴다.

패닉 메시지에서는 RIP(Instruction Pointer) 주소로 문제 발생 위치를 찾고, Call Trace로 함수 호출 경로를 따라간다. Code 섹션은 문제 명령어를, Modules 섹션은 관련 커널 모듈을 식별하는 데 사용한다.

실행 중인 커널의 단서를 수집하는 추적 도구

DTrace는 실행 중인 시스템을 관찰하는 동적 추적 도구다. 성능 오버헤드를 최소화해 프로덕션 환경에서도 사용할 수 있으며, D 언어 스크립트로 추적 동작을 정의한다. 커널 공간과 사용자 공간 모두를 추적할 수 있다.

YesNoDTrace 스크립트 작성프로브 정의시스템 추적함수 진입/종료타이머 이벤트데이터 수집집계 통계결과 분석성능 문제?최적화 적용모니터링 계속

DTrace로는 시스템 콜의 빈도와 지연 시간, 파일 I/O 패턴, 네트워크 트래픽을 추적할 수 있다. 프로세스 스케줄링 동작을 관찰하는 용도로도 쓴다.

SystemTap은 Linux 커널을 위한 동적 추적 도구다. C 기반 스크립트 언어를 사용하며, 커널 함수·시스템 콜·타이머 등 다양한 프로브를 제공한다. tapset 라이브러리는 재사용 가능한 스크립트를 제공한다. 커널 함수 호출, 메모리 할당 패턴, 락 경합, I/O 병목을 분석할 때 활용할 수 있다.

eBPF(Extended Berkeley Packet Filter)는 커널 내부에서 안전하게 실행되는 샌드박스 프로그램이다. BCC(BPF Compiler Collection)로 작성할 수 있고, bpftrace는 간단한 원라이너 추적을 지원한다. 네트워크, 보안, 성능 분석에 널리 사용된다.

eBPF 프로그램컴파일 검증커널에 로드이벤트에 연결데이터 수집사용자 공간 전송분석 시각화

커널 로그도 기본적인 분석 경로다. dmesg로 커널 링 버퍼를 확인하고, /var/log/kern.log, /var/log/messages를 분석한다. systemd 환경에서는 journalctl로 저널을 조회하며, 로그 레벨 조정과 필터링을 병행한다.

병목의 성격에 맞춰 프로파일링하기

성능 문제는 CPU, 메모리, I/O, 락 중 어느 영역에서 병목이 생겼는지 구분해야 한다. CPU 프로파일링은 함수별 실행 시간을, 메모리 프로파일링은 할당과 해제 패턴을 다룬다. I/O 프로파일링은 디스크와 네트워크 성능을 측정하며, 락 프로파일링은 동기화 오버헤드를 분석한다.

perf는 성능 이벤트를 기록하고 결과를 분석하는 도구다. perf record로 이벤트를 수집하고, perf report로 결과를 분석한다. perf stat은 성능 카운터 통계를 수집하며, perf top은 실시간 프로파일링에 사용한다.

YesNoperf 프로파일링perf record샘플 수집perf.data 생성perf report핫스팟 분석최적화 필요?코드 개선프로파일링 종료재측정

CPU 분석에서는 함수별 CPU 사용 시간을 측정하고, 플레임 그래프로 호출 스택을 시각화한다. 핫스팟 함수를 식별한 뒤 캐시 미스와 브랜치 예측 실패도 분석 대상이 된다.

메모리 영역에서는 Valgrind의 Massif로 힙 사용량을 추적할 수 있다. 메모리 할당 핫스팟과 단편화, 캐시 라인 경합을 확인한다.

I/O 분석에는 블록 계층 I/O를 추적하는 blktrace, 프로세스별 I/O를 모니터링하는 iotop, 디바이스별 I/O 통계를 수집하는 iostat이 있다. 순차 I/O와 랜덤 I/O의 패턴 차이도 최적화 판단에 반영한다.

락 프로파일링은 대기 시간과 보유 시간을 측정해 경합이 심한 락을 찾는 과정이다. 락 세분화(Lock Granularity)를 조정하거나 RCU(Read-Copy-Update) 적용을 검토할 수 있다.

경합 발생lockstat 활성화경합 지점 측정대기 시간 분석 세분화RCU 도입 프리 자료구조

커널 내부를 직접 들여다보는 방법

커널 디버거로는 KGDB, KDB, QEMU + GDB, printk 디버깅을 사용할 수 있다. KGDB는 원격 커널 디버깅에, KDB는 콘솔 기반 디버깅에 쓰인다. QEMU와 GDB의 조합은 가상 환경에서의 커널 디버깅을 지원하며, printk는 커널 메시지를 출력하는 방식이다.

Ftrace는 커널에 내장된 추적 프레임워크다. 함수 트레이서로 호출 흐름을 파악하고, 이벤트 트레이서로 커널 이벤트를 추적한다. 제어 경로는 /sys/kernel/debug/tracing이다.

Sysrq 매직 키는 시스템이 응답하지 않을 때 긴급 명령을 실행하는 수단이다. t는 프로세스 리스트를, m은 메모리 정보를 출력한다. b는 안전한 재부팅에, s, u는 동기화와 재마운트에 사용한다.

디버깅 목적의 커널 설정 옵션도 분석 가능 범위를 좌우한다.

커널 디버깅 옵션CONFIG_DEBUG_INFOCONFIG_KASANCONFIG_LOCKDEP심볼 정보 포함주소 새니타이저 의존성 검사디버깅 용이메모리 오류 탐지데드락 예방

CONFIG_DEBUG_INFO는 디버깅 심볼을 포함한다. CONFIG_KASAN은 커널 주소 새니타이저이며, CONFIG_LOCKDEP는 락 의존성을 검사한다. CONFIG_SLUB_DEBUG는 슬랩 메모리 디버깅에 사용한다.

자주 마주치는 장애를 좁히는 순서

NULL 포인터 역참조가 발생하면 Oops 메시지에서 RIP 주소를 확인하고, objdump로 커널 이미지를 역어셈블한다. 이후 문제 함수와 라인을 식별해 포인터 검증 코드를 추가한다.

데드락은 lockdep 경고 메시지와 락 획득 순서에서 단서를 찾는다. 순환 의존성을 제거하고, 타임아웃 또는 try_lock 사용을 검토한다.

성능 저하 상황에서는 perf로 CPU 핫스팟을 식별한 뒤 불필요한 루프나 재귀를 제거한다. 캐시 친화적 자료구조 사용과 병렬 처리 적용도 분석 결과에 따라 선택할 수 있다.

커널 패닉 분석, DTrace와 SystemTap 기반 동적 추적, 성능 프로파일링은 서로 다른 관점에서 시스템 문제를 드러낸다. 지속적인 모니터링과 예방적 분석은 장애를 미연에 방지하는 데 활용된다.

커널 디버깅커널 패닉성능 프로파일링eBPF운영체제