---
title: "챗GPT 충돌 원인, 알고 보니 18년 묵은 GNU libunwind 버그였다"
published: 2026-07-01T12:05:03.062Z
canonical: https://jeff.news/article/4489
---
# 챗GPT 충돌 원인, 알고 보니 18년 묵은 GNU libunwind 버그였다

오픈AI가 챗GPT 데이터 인프라에서 반복되던 원인불명 충돌을 추적한 끝에 하드웨어 결함과 18년 된 GNU libunwind 버그가 겹친 문제였다고 밝혔다. 개별 크래시 로그만 파던 방식에서 벗어나 1년치 충돌 데이터를 모아 패턴을 본 게 결정적이었다.

- 챗GPT에서 몇 달 동안 이어진 원인불명 충돌의 정체가 드디어 잡힘
  - 오픈AI가 공식 블로그에서 밝힌 내용이고, 문제는 챗GPT 핵심 데이터 인프라 쪽에서 발생했음
  - 영향 구간은 데이터 플러그인과 대화 검색 등에 쓰이는 Rockset 서비스였음
  - Rockset은 오픈AI가 2024년에 인수한 실시간 데이터 분석 시스템임

- 처음 증상은 전형적인데, 원인은 전형적이지 않았음
  - 프로그램이 비정상적인 메모리 주소에 접근하다가 갑자기 죽는 형태였음
  - 엔지니어들이 개별 충돌 기록을 하나씩 파봤지만, 흔한 오류 패턴이 아니라서 원인 추적이 잘 안 됐음
  - 이런 종류의 장애는 로그 몇 개만 보면 전부 다 다른 문제처럼 보이는 경우가 많아서 빡셈

- 돌파구는 “개별 사건 분석”이 아니라 “전체 충돌 데이터 역학조사”였음
  - 오픈AI는 지난 1년간 발생한 충돌 데이터를 모아서 패턴을 다시 봤음
  - 그 결과 충돌이 크게 두 묶음으로 갈라졌음
  - 하나는 특정 지역의 특정 물리 서버에 몰려 있었고, 이건 하드웨어 결함으로 판명됨
  - 해당 서버를 교체하자 관련 충돌은 바로 사라짐

> [!IMPORTANT]
> 핵심은 1년치 충돌 데이터를 모아 봤다는 점임. 단건 로그만 파서는 하드웨어 결함과 라이브러리 버그가 섞인 문제를 분리하기 어려웠음.

- 진짜 흥미로운 쪽은 나머지 충돌이었음. 범인은 18년 된 GNU libunwind 버그였음
  - GNU libunwind 초기 버전부터 있던 경합 상태 버그가 특정 조건에서만 터지고 있었음
  - 버그 자체는 오래됐지만, 발현 조건이 너무 희귀해서 그동안 발견되지 않았던 것으로 보임
  - 오픈AI 시스템은 대규모 연산 때문에 특정 신호를 이례적으로 높은 비율로 사용하고 있었음
  - 최근 신호 처리 방식이 바뀌면서 그 오래된 버그가 실제로 터질 조건이 맞춰진 셈임

- 해결은 두 갈래로 진행됨
  - 오픈AI는 문제가 된 라이브러리를 더 안정적인 다른 라이브러리로 교체했음
  - 동시에 GNU libunwind 쪽에는 버그 재현 코드와 수정 사항을 공유했음
  - 내부 장애를 고친 데서 끝내지 않고 업스트림 오픈소스에도 돌려준 건 꽤 좋은 마무리임

- 이 사건이 개발자에게 주는 메시지는 단순함. 큰 시스템에서는 “말도 안 되는 버그”가 진짜로 존재함
  - 하드웨어 결함 하나와 18년 묵은 오픈소스 버그 하나가 같이 섞이면, 증상은 거의 미스터리처럼 보임
  - 특히 고빈도 신호 처리, 네이티브 라이브러리, 대규모 데이터 인프라가 겹치면 오래된 저수준 버그도 다시 살아남
  - 오픈AI가 말한 것처럼, 불가능해 보이는 문제를 진단 가능한 문제로 바꾸는 건 결국 충분한 데이터와 좋은 관측성임

---

## 기술 맥락

- 이번 선택의 핵심은 크래시 하나하나를 더 오래 파는 게 아니라, 1년치 충돌 데이터를 모아서 분포를 본 거예요. 왜냐하면 하드웨어 결함처럼 위치가 중요한 문제와 라이브러리 경합 상태처럼 타이밍이 중요한 문제가 섞이면, 단건 로그만으로는 원인이 계속 흐려지거든요.

- GNU libunwind 같은 저수준 라이브러리는 평소에는 거의 눈에 안 띄지만, 예외 처리나 스택 추적처럼 런타임 깊은 곳에서 움직여요. 그래서 오픈AI처럼 신호를 높은 비율로 쓰는 대규모 시스템에서는 아주 오래된 버그도 갑자기 운영 장애로 튀어나올 수 있어요.

- 오픈AI가 라이브러리를 교체하면서 재현 코드와 수정 사항을 업스트림에 공유한 것도 중요해요. 내부 우회만 하면 자기 서비스는 멈추겠지만, 같은 라이브러리를 쓰는 다른 시스템에는 버그가 계속 남기 때문이에요.

## 핵심 포인트

- 챗GPT 데이터 플러그인과 대화 검색에 쓰이는 Rockset 서비스에서 원인불명 충돌이 발생했다
- 충돌 원인은 특정 물리 서버의 하드웨어 결함과 GNU libunwind의 오래된 경합 상태 버그였다
- 오픈AI는 라이브러리 교체와 함께 오픈소스 프로젝트에 재현 코드와 수정 사항을 공유했다

## 인사이트

대규모 서비스 장애 디버깅은 결국 로그 한 줄의 천재적 해석보다 좋은 전체 데이터가 이긴다는 얘기다. 18년 동안 숨어 있던 버그도 트래픽과 신호 처리 패턴이 바뀌면 갑자기 프로덕션 한복판에서 튀어나온다.
