백엔드/Spring Boot

Java 애플리케이션 SIGSEGV (Segmentation Fault) 오류 해결하기

whooooo 2025. 2. 23. 15:15

⚠️ 어느 날 회사에서 코드를 작성하다가 빌드를 돌린 순간..! jdk가 빌드 되는 과정에서 오류가 발생했습니다. 

에러 메시지를 보면 Java Virtual Machine (JVM) 외부(native code)에서 문제가 발생했고, JVM이 예상하지 못한 동작을 수행하면서 SIGSEGV (Segmentation Fault) 가 발생, 결국 프로세스가 강제 종료되었다는 내용입니다. 

 

오늘은 이 오류의 원인과 해결 방법에 대해서 작성해 보겠습니다!

 

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00000000000207d6, pid=1, tid=7
#
# JRE version: OpenJDK Runtime Environment (17.0+14) (build 17-ea+14)
# Java VM: OpenJDK 64-Bit Server VM (17-ea+14, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, serial gc, linux-amd64)
# Problematic frame:
# C  0x00000000000207d6
#
# Core dump will be written. Default location: /core.%e.1.%t
#
# An error report file with more information is saved as:
# //hs_err_pid1.log
#
# If you would like to submit a bug report, please visit:
#   https://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

 

 

🔍 구글링을 통해 찾아본 SIGSEGV 오류가 발생하는 경우

  • JNI (Java Native Interface)에서 잘못된 메모리 접근
  • 사용 중인 라이브러리가 현재 실행 중인 JDK와 호환되지 않음
  • 네이티브 코드에서 예상치 못한 예외 발생

 

👍 해결 방법

오류가 발생하기 전 코드와 오류가 발생한 후의 코드를 비교해보니 새롭게 추가된 기능은 FCM 기능이었고, build.gradle에서 호출하고 있는 FCM Admin SDK의 버전이 Java 17과 호환되지 않아서 발생한 것이었습니다. 

FCM Admin SDK을 수정해주었더니 해결되었습니다!

 

앞으로는 기존 코드와 공식 문서가 있다고 믿고 바로 적용하지 않고, 라이브러리와 내 프로젝트의 자바 버전이 호환이 되는 버전인지, 기존 코드의 기능들이 라이브러리의 최신 버전에서는 호출이 가능한지를 확인해 보는 습관을 들여보도록 하겠습니다!!