스레드
-
OOM: unable to create new native thread 추적하기JVM 2024. 9. 23. 02:51
1) 서론개인적으로 개발하던 애플리케이션에서 OOM이 발생했습니다. 현상과 문제 되는 코드는 명확하게 발견했는데요. 원인을 찾아나가는 과정 중에 배운 것을 공유합니다.2) OutOfMemoryError 발생JVM 기반 애플리케이션에서 발생했고, 더 이상 요청을 받을 수 없는 상태가 되었습니다.Caused by: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:717) 이유는 명확했습니다. 스레드풀 생성에 singleton pattern이 적용되지 않았습니다. 한번만 초기화되고, 이후에는 초기화된 인스..
-
착한 가로채기, InterruptedExceptionJava & Kotlin 2022. 2. 21. 03:16
1) 서론 JVM은 Java 언어가 어떠한 운영체제와도 동작할 수 있도록 도와주는 가상 머신입니다. 기계어로 바로 변환되는 C언어와 다르게, byte code로 변환 후 필요시 native code로 변환하고 읽는데요. "Write once, Run anywhere"라는 자바 언어를 만들던 당시의 철학을 떠올려보면, 당연한 동작 방식 입니다. JVM은 단순히 코드를 변환해주는 역할만 하지 않습니다. 운영체제 위해서 애플리케이션과 메모리를 관리하는 역할도 하는데요. 특히 프로세스, 스레드 관리를 매우 철저하게 해 줍니다. GC와 같이 사용되지 않지만, 메모리에 올라와있는 코드를 정리해주기도 합니다. 특히 스레드가 deadlock에 빠졌을 때 JVM은 그냥 두고만 보지 않는데요. 이때 발생할 수 있는 Int..