kotlin
1.7.10openJDK
17.0.2+8coroutines-*
1.6.4병렬 스레드로 코루틴을 사용하는 코드가 JVM Crash
로 중지되는 현상이 발생
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000000000000000, pid=1, tid=95
#
# JRE version: OpenJDK Runtime Environment Temurin-17.0.2+8 (17.0.2+8) (build 17.0.2+8)
# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (17.0.2+8, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# C 0x0000000000000000
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home
#
# If you would like to submit a bug report, please visit:
# https://github.com/adoptium/adoptium-support/issues
#
--------------- S U M M A R Y ------------
Command Line: -Xms2g -Xmx2g -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Duser.timezone=Asia/Seoul -Dtrace_warm_up_enabled=false -Dspring.profiles.active=test
--------------- T H R E A D ---------------
Current thread (0x00007f90b0183710): JavaThread "C2 CompilerThread6" daemon [_thread_in_native, id=95, stack(0x00007f90fd8c4000,0x00007f90fd9c5000)]
Current CompileTask:
C2: 20639 17631 ! 4 kotlinx.coroutines.reactive.PublisherAsFlow::collectImpl (406 bytes)
위의 에러가 발생하면서, 어플리케이션이 종료되는 상황이였다.
Attempt 1: 병렬 스레드의 풀을 줄여보자
Attempt 2: 어플리케이션의 코드를 보면,
webFlux
의Flux
를asFlow
메소드를 통해coroutines
의Flow
로 전환하지 않도록 해보자
PublisherAsFlow
에서 에러가 발생했음FLux
코드를 변환없이, 그대로 사용하도록 변경runBlocking
, suspend
) 코드가 남아있어서, 완전히 해결되지 않았음asFlow
에 문제점이라고 하기에는 섣부른 판단이라고 생각Attempt 3:
openJDK
버전 업그레이드를 해보자
https://github.com/adoptium/adoptium-support/issues
kotlin
관련되서 openJDK
이슈를 검색하던 도중, C2
컴파일러 관련 이슈를 발견kotlin
개발자가 openJDK
이슈임을 확인하고, openJDK
개발자는 버전 업을 통해서 문제를 픽스한겠다고 결론(https://bugs.openjdk.org/browse/JDK-8303279)17.0.9+2
버전에서 C2
관련 kotlin
버그들이 픽스됐으나, 아직 릴리즈가 되지 않은 상황coroutines
관련 코드들은 릴리즈 이후에 사용하도록 변경coroutines
코드 제거 + openJDK
최근 버전 릴리즈 적용JVM Crash
는 발생하지 않음 🎉coroutines
코드는, 17.0.9+2
버전 릴리즈 이후에 원복하도록 결정openJDK
버전 이슈는 처음 경험해봐서 힘들었다. 위에 버그 관련된 글도, 작성일자 기준으로 3주전에 이슈가 픽스됐다는 것을 확인할 수 있었다. 운이 좋아서, 다른 사람들의 질문을 통해서 해결할 수 있었다는 생각도 들지만~ 한편으로는, 누군가 질문하지 않았더라면 문제를 해결하지 못할 수도 있겠다는 생각도 들었다. 앞으로는 직접 오픈 소스에 질문을 해보는 경험을 가져봐야 겠다는 생각도 든다.
글 잘 봤습니다.