피드로 돌아가기
My app crashed with 'illegal instruction' – AVX compatibility fixed it
Dev.toDev.to
Infrastructure

CPU Instruction Set 불일치로 인한 'Illegal Instruction' 크래시 해결 및 범용 바이너리 확보

My app crashed with 'illegal instruction' – AVX compatibility fixed it

Noushad Patel2026년 6월 21일6intermediate

Context

최신 CPU의 AVX-512 및 AVX2 명령어 세트를 활용하도록 최적화된 빌드 환경에서 생성된 바이너리가 구형 CPU 환경에서 실행될 때 발생하는 런타임 크래시 문제 분석. 개발 환경과 타겟 환경의 CPU 마이크로아키텍처 불일치로 인한 명령어 인식 불가 현상이 핵심 병목으로 작용.

Technical Solution

  • 타겟 시스템의 CPU Flags를 lscpu 명령어로 분석하여 지원 가능한 Instruction Set 범위 식별
  • Bun 런타임의 기본 최적화 바이너리 대신 범용 x86-64 명령어 세트를 사용하는 bun-linux-x64-baseline 빌드 채택을 통한 호환성 확보
  • Go 컴파일러의 GOAMD64 환경 변수를 v1으로 설정하여 최신 CPU 전용 최적화 기능을 배제한 Baseline 바이너리 생성
  • 최신 CPU의 고성능 벡터 연산(AVX-512 등) 포기를 통한 하드웨어 추상화 계층의 최하위 공통 분모(Lowest Common Denominator) 일치 전략 적용
  • CI/CD 파이프라인 내에서 타겟 아키텍처 수준을 명시적으로 정의하여 배포 환경에 따른 바이너리 파편화 방지

- 배포 대상 서버의 CPU Flags를 확인하여 AVX, AVX2, AVX-512 지원 여부 검증 - 고성능 런타임(Bun 등) 사용 시 최적화 빌드와 Baseline 빌드의 차이점 검토 - Go 언어 빌드 시 타겟 환경의 CPU 세대에 맞춰 GOAMD64 변수(v1~v4) 설정 적용 - '내 컴퓨터에선 된다'는 가정을 배제하고 타겟 환경의 최저 사양 하드웨어 제약 사항 정의

원문 읽기