PostgreSQL LISTEN/NOTIFY 성능 병목 현상: 수백만 시간의 회의 데이터 처리에서 얻은 교훈

2025-07-11
PostgreSQL LISTEN/NOTIFY 성능 병목 현상: 수백만 시간의 회의 데이터 처리에서 얻은 교훈

Recall.ai는 매달 수백만 시간 분량의 회의 데이터를 처리합니다. PostgreSQL 데이터베이스는 고병렬 쓰기로 인해 다운타임이 발생했습니다. 조사 결과 LISTEN/NOTIFY 기능이 트랜잭션 커밋 단계에서 글로벌 데이터베이스 락을 획득하여 모든 커밋이 직렬화되고 병목 현상이 발생하는 것으로 나타났습니다. 이 로직을 애플리케이션 계층으로 마이그레이션하여 문제를 해결했습니다.

더 보기
개발 고병렬

리눅스 커널 스레드 수명 주기의 함정: 임의로 종료되는 Chromium 프로세스의 경우

2025-04-10
리눅스 커널 스레드 수명 주기의 함정: 임의로 종료되는 Chromium 프로세스의 경우

Recall.ai의 Output Media 시작 지연 시간을 최적화하던 중 엔지니어는 당황스러운 버그를 발견했습니다. Chromium 프로세스가 시작 후 임의로 종료되는 현상이었습니다. 근본 원인은 Bubblewrap의 `--die-with-parent` 플래그와 리눅스 커널의 PR_SET_PDEATHSIG 처리 방식에 있었습니다. 이 플래그는 부모 프로세스가 아니라 부모 스레드가 종료될 때 자식 프로세스에 SIGKILL 신호를 보냅니다. Tokio의 스레드 관리 메커니즘이 이 동작과 상호 작용하여 부모 스레드가 회수될 때 Chromium이 예기치 않게 종료되었습니다. 플래그를 제거하여 문제는 해결되었지만, 리눅스 커널의 잘 알려지지 않은 특성이 드러나면서 스레드 수명 주기와 프로세스 격리가 상호 작용할 때 주의가 필요함을 강조합니다.

더 보기
개발

난해한 Linux 프로세스 플래그를 사용한 지연 시간 83% 감소

2025-03-06
난해한 Linux 프로세스 플래그를 사용한 지연 시간 83% 감소

Recall.ai의 Output Media 기능을 최적화하던 엔지니어가 당혹스러운 문제에 직면했습니다. 샌드박스 환경에서 Chromium 프로세스가 무작위로 종료되는 현상이 발생한 것입니다. 철저한 디버깅 결과, 원인은 Linux 커널의 prctl(PR_SET_PDEATHSIG, SIGKILL) 함수에 있는 것으로 밝혀졌습니다. 이 함수는 프로세스가 아닌 부모 스레드를 추적합니다. Tokio의 스레드 관리 메커니즘과 예상치 못한 상호 작용으로 부모 스레드가 수거되고 SIGKILL 신호가 트리거되어 자식 프로세스가 종료되었습니다. Bubblewrap의 --die-with-parent 플래그를 제거함으로써 문제가 해결되었고, 지연 시간이 83% 감소했습니다.

더 보기