Thread
-
기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
[Java] ForkJoinPool 에러 발생 in Java11기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
2024.03.11 -
Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
[Kafka] Spring Kafka Listener Concurrency 설정Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
2024.02.28 -
ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
[Java] ForkJoinPool이란 (ParellelStream)ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
2023.12.21 -
Thread 종류 non-daemon, daemon tread non-daemon thread java의 main을 실행했을 때 실행되는 thread daemon thread 위의 non-daemon이 아닌 thread의 작업을 돕는 보조적인 역할을 하는 thread non-daemon thread가 모두 죽으면, daemon thread도 강제적으로 종료된다 garbage collection와 같은 백그라운드 태스크를 실행하며 low priority를 가지고 있습니다. Thread 상태 스레드의 상태는 java.lang.Thread 클래스 내부에 State라는 이름을 가진 Enumerated Types(열거형)으로 선언되어 있습니다. NEW 스레드가 생성되었지만 아직 실행되지 않은 상태 RUNNABLE..
[JAVA] Thread 종류 및 상태Thread 종류 non-daemon, daemon tread non-daemon thread java의 main을 실행했을 때 실행되는 thread daemon thread 위의 non-daemon이 아닌 thread의 작업을 돕는 보조적인 역할을 하는 thread non-daemon thread가 모두 죽으면, daemon thread도 강제적으로 종료된다 garbage collection와 같은 백그라운드 태스크를 실행하며 low priority를 가지고 있습니다. Thread 상태 스레드의 상태는 java.lang.Thread 클래스 내부에 State라는 이름을 가진 Enumerated Types(열거형)으로 선언되어 있습니다. NEW 스레드가 생성되었지만 아직 실행되지 않은 상태 RUNNABLE..
2023.07.08