java.lang.OutOfMemoryError: unable to create new native thread 원인 및 조치 방법

반응형
반응형

"java.lang.OutOfMemoryError: unable to create new native thread" 

 

이 오류는 java에서 너무 많은 thread를 생성하여

더 이상 생성을 못하는 상황에서 발생하는 오류이다.

 

 

조치 방법에 대해서는 크게 두 가지로 볼 수 있다.

 

 

1. JAVA Stack size 를 조정하여 조치하는 방법

 

JVM 실행 옵션에 -Xss 값을 줄여서 가지고 있는 메모리 대비 더 많은 thread 생성 가능

 

 

 

 

2. OS 상에 커널 퍼라미터를 수정하여 조치하는 방법

(1) kernel.threads-max 값 체크

[root@test-1 ~]# cat /proc/sys/kernel/threads-max 
7743

 

아래 파일 내용의 네번째 항목은 현재 CPU가 수행하고 있는 스레드 수 / 커널 스케줄러 목록 총 스레드수이다

현재 총 스레드 수는 119개이며 필요에 따라 조정을 해줍니다.

[root@test-1 ~]# cat /proc/loadavg 
0.03 0.08 0.05 2/119 1359

 

(2) max user processes 값 체크

스레드수는 기본적으로 프로세스 수의 제한을 따른다, max user processes 수를 체크하여 필요에 따라 조정을 해줍니다

[root@test-1 ~]# ulimit -a | grep processes
max user processes              (-u) 3871

 

 

(3) kernel.pid_max 값 체크

[root@test-1 ~]# cat /proc/sys/kernel/pid_max
32768

 

아래 파일 내용의 다섯 번째 항목은 가장 최근에 실행한 PID(프로세스 아이디)입니다.

해당 값이 kernel.pid_max 값 제한에 걸리지는 않는지 체크하여 필요에 따라 조정을 해줍니다 

[root@test-1 ~]# cat /proc/loadavg 
0.03 0.08 0.05 2/119 1359

 

 

반응형

댓글

Designed by JB FACTORY

loading