목록 보기
strace 추적으로 8μs 차이의 동시성 버그 찾기
데브옵스

strace 추적으로 8μs 차이의 동시성 버그 찾기

인프런
인프런
2026년 2월 19일

두줄요약

strace로 파일 시스템콜을 추적해 8μs 간격의 디렉터리 생성 경합을 확인했습니다. C++ 반환값 처리 결함을 찾아 출력 디렉터리 선생성으로 우회했습니다.

문제 상황

  • shaka-packager의 다중 입력 병렬 처리에서 출력 파일 생성이 간헐적으로 실패
  • 재시도 시 성공하거나 입력 파일이 하나일 때는 정상 동작하는 비결정적 현상

원인 분석

  • strace의 스레드별 마이크로초 타임스탬프로 두 스레드의 출력 디렉터리 생성 경합 확인
  • 8μs 차이로 한 스레드는 mkdirat 성공, 다른 스레드는 EEXIST 반환 후 openat 이전 종료
  • std::filesystem::create_directories의 false 반환을 error_code 확인 없이 실패로 처리한 코드 결함

해결 방법

  • create_directories 반환값과 error_code를 함께 검사하도록 조건문 수정
  • 즉시 우회책으로 패키저 실행 전에 출력 디렉터리를 선생성하여 경합 구간 제거

적용해볼 점

  • 애플리케이션 로그만으로 원인 파악이 어려운 파일 I/O 오류에 strace 기반 시스템콜 추적 활용
  • 존재 확인 후 생성하는 TOCTOU 흐름에서 정상적인 EEXIST와 실제 오류의 구분 검증

다음 읽기

비슷한 주제의 백엔드 글

Lustre의 파일 create & open 과정 분석 - 1

Lustre에서 새 파일을 생성하고 여는 과정이 클라이언트 측에서 어떻게 시작되는지 분석했습니다. VFS, LLITE, LMV, MDC를 거쳐 MDS로 intent와 FID가 전달되는 흐름을 설명했습니다.

글루시스
글루시스
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...