Linux Illegal instruction 오류가 발생하는 원인과 해결 방법

Linux 서버에서 프로그램을 실행하는 도중 Illegal instruction 오류가 발생하며 프로그램이 즉시 종료되는 경우가 있습니다. 이 오류는 CPU가 지원하지 않는 명령어를 실행했거나 손상된 실행 파일, 잘못된 컴파일 옵션 등으로 인해 발생하는 대표적인 실행 오류입니다.

특히 CPU 아키텍처가 다른 환경에서 컴파일된 프로그램을 실행하거나, 최신 CPU 명령어(SSE, AVX, AVX2 등)를 지원하지 않는 시스템에서 프로그램을 실행할 때 자주 발생합니다.

이번 글에서는 Illegal instruction 오류가 발생하는 원인과 확인 방법, 해결 방법을 자세히 알아보겠습니다.

Illegal instruction이란 무엇인가?

Illegal instruction은 CPU가 해석할 수 없는 명령어를 실행했을 때 운영체제가 SIGILL(Signal 4) 신호를 보내며 발생하는 오류입니다.

대표적인 오류 예시는 다음과 같습니다.

Illegal instruction (core dumped)

또는

Program terminated with signal SIGILL, Illegal instruction.

또는

Illegal instruction

이 오류가 발생하면 프로그램은 즉시 종료되며 Core Dump가 생성될 수도 있습니다.

Illegal instruction 오류가 발생하는 대표적인 원인

다음과 같은 경우에 자주 발생합니다.

  • CPU에서 지원하지 않는 명령어 사용
  • 잘못된 컴파일 옵션
  • CPU 아키텍처 불일치
  • 손상된 실행 파일
  • 손상된 라이브러리
  • 잘못된 최적화 옵션
  • 오래된 CPU에서 최신 프로그램 실행
  • ARM과 x86 아키텍처 혼용
  • 프로그램 버그
  • 메모리 손상

실무에서는 CPU 정보와 실행 파일 정보를 먼저 확인하는 것이 중요합니다.

1. CPU 정보 확인하기

현재 CPU 정보를 확인합니다.

lscpu

또는

cat /proc/cpuinfo

CPU 모델과 지원하는 명령어를 확인합니다.

2. CPU 지원 명령어 확인하기

CPU가 지원하는 기능(Flags)을 확인합니다.

grep flags /proc/cpuinfo

예시

sse sse2 sse4_1 sse4_2 avx avx2

프로그램에서 사용하는 명령어가 CPU에서 지원되는지 확인합니다.

3. 실행 파일 정보 확인하기

실행 파일의 아키텍처를 확인합니다.

file 프로그램명

예시

file myapp

출력 결과에서 다음 사항을 확인합니다.

  • x86_64
  • ARM
  • AArch64
  • ELF 형식

현재 시스템과 일치하는지 확인해야 합니다.

4. 라이브러리 확인하기

필요한 라이브러리가 정상적으로 연결되어 있는지 확인합니다.

ldd 프로그램명

누락된 라이브러리나 손상된 라이브러리가 있는지 확인합니다.

5. Core Dump 확인하기

Core Dump 생성 여부를 확인합니다.

ls -lh core*

설정 확인

ulimit -c

비활성화되어 있다면

ulimit -c unlimited

으로 활성화합니다.

6. GDB 분석하기

Core Dump가 있다면 GDB로 분석합니다.

gdb 프로그램명 core

백트레이스를 확인합니다.

bt

SIGILL이 발생한 위치를 확인할 수 있습니다.

7. 컴파일 옵션 확인하기

프로그램을 직접 빌드했다면 컴파일 옵션을 확인합니다.

예시

gcc -march=native source.c -o app

-march=native는 현재 CPU에서만 동작하는 명령어를 사용할 수 있으므로 다른 서버에서는 오류가 발생할 수 있습니다.

범용 실행 파일을 만들려면 CPU 호환 옵션을 사용하는 것이 좋습니다.

8. 패키지 무결성 확인하기

설치된 실행 파일이 손상되었을 가능성도 있습니다.

RPM 계열

rpm -V 패키지명

Debian 계열

debsums 패키지명

파일 손상 여부를 확인합니다.

9. 시스템 로그 확인하기

커널 로그를 확인합니다.

dmesg

또는

journalctl -xe

SIGILL 관련 로그가 있는지 확인합니다.

10. 프로그램 재설치 또는 재컴파일

실행 파일이 손상되었거나 CPU와 맞지 않는 경우에는 프로그램을 다시 설치하거나 현재 시스템 환경에 맞게 다시 컴파일하는 것이 가장 확실한 해결 방법입니다.

Illegal instruction 문제를 확인하는 순서

실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.

  1. lscpu 확인
  2. CPU Flags 확인
  3. file 명령으로 실행 파일 확인
  4. ldd 확인
  5. Core Dump 확인
  6. GDB 분석
  7. 컴파일 옵션 확인
  8. 패키지 무결성 확인
  9. 시스템 로그 확인
  10. 프로그램 재설치 또는 재컴파일

이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.

Segmentation fault, Bus error와의 차이점

오류의미
Segmentation fault접근 권한이 없는 메모리에 접근
Bus error메모리 정렬 또는 물리 메모리 접근 오류
Illegal instructionCPU가 지원하지 않는 명령어 실행

세 오류 모두 프로그램이 비정상 종료되지만 발생 원인은 서로 다릅니다.

자주 묻는 질문

Illegal instruction이 발생하면 CPU가 고장 난 것인가요?

아닙니다. 대부분 CPU 고장보다는 지원하지 않는 명령어 사용이나 실행 파일의 호환성 문제로 발생합니다.

다른 서버에서는 정상인데 특정 서버에서만 발생합니다.

CPU 모델이 다르거나 지원하는 명령어(AVX, SSE 등)가 다를 가능성이 높습니다.

Core Dump 분석이 필요한가요?

프로그램을 직접 개발하거나 원인을 정확하게 분석해야 한다면 GDB와 Core Dump 분석이 가장 효과적입니다.

마무리

Illegal instruction 오류는 Linux에서 CPU가 지원하지 않는 명령어를 실행하거나 실행 파일과 시스템 환경이 맞지 않을 때 발생하는 대표적인 실행 오류입니다. lscpu, file, ldd, dmesg, Core Dump, GDB 등을 활용하면 대부분의 원인을 정확하게 분석할 수 있습니다. 특히 프로그램을 여러 서버에서 배포하는 환경이라면 CPU 아키텍처와 컴파일 옵션을 반드시 확인하는 것이 중요합니다.

댓글 남기기