OutOfMemoryError: unable to create new native thread 원인
OutOfMemoryError 문구만 봐서는 해당 에러가 메모리와 관련된 오류일 것이라고 생각하기 쉽다. 하지만 Java 1.6과 1.7에서 OS가 Thread를 생성해 주지 못할 때 OutOfMemoryError: unable to create new native thread 에러가 표시될 수 있다.
. 참고 : http://java.dzone.com/articles/outofmemoryerror-unable-create
Linux에서 사용자가 생성할 수 있는 최대 프로세스 개수를 확인하는 방법 중 하나는 ulimit 을 이용하는 것이다.
>ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62341
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 10240
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
프로세스 생성과 관련된 값은 "max user processes"이다.
해당값만 보고 싶다면
>ulimit -u
1024
Hard 설정 값을 보고 싶다면
>ulimit -Hu
2048
Java 프로세스가 자식 프로세스 모두 합쳐서 해당 값보다 많은 수의 Thread를 생성하려고 한다면 OutOfMemoryError: unable to create new native thread에러가 발생하게 된다.
max user processes 값 변경 방법
>ulimit -Hu 65535
>ulimit -Su 65535
위와 같이 할 경우 재부팅 되거나 세션이 새로 열리면 변경된 값이 적용되지 않는다.
재부팅이나 새 세션에도 해당값을 유지하려면 /etc/security/limits.conf 파일을 편집한 후 재부팅해야 한다.
>vi /etc/security/limits.conf
대략적으로 주석을 보면 어떻게 하는지 알 수 있다.
파일 제일 끝에 아래와 같이 추가한다. 이미 비슷한 라인이 있으면 편집한다.
* hard nproc 65535
* soft nproc 65535
특정 유저만 해당값을 설정하고 싶으면 '*'대신에 ID를 넣어준다.
hadoop hard nproc 65535
hadoop soft nproc 65535
hard는 최대로 생성할 수 있는 프로세스 수가 아니라 최대로 설정 가능한 제한값으로 root유저만 변경 가능하다. soft 값이 생성할 수 있는 최대 프로세스 수이며 root를 포함한 모든 유저는 hard값이하로만 설정 가능하다. (hard가 1024면 soft는 1024보다 클 수 없다.)
. 참고 : http://unix.stackexchange.com/questions/29577/ulimit-difference-between-hard-and-soft-limits
추가
. 파일 편집을 마친 후 재부팅 해야 해당 값이 적용된 다는 것을 잊지 말자.
. 해당 값을 너무 작게 설정하면 OS가 먹통이 될 수 있다. 복구하려면 rescue 나 single-user mode에서 /etc/security/limits.conf 파일을 편집해야 한다.
. max user processes의 최대값은 4,194,303이나 "sysctl kernel.pid_max"값에 따른다. CentOS 6.5의 kernel.pid_max 값은 32,768이다. 즉 ulimit에서 65,535로 변경해도 32,768이다.
(참고 : http://unix.stackexchange.com/questions/124040/how-to-determine-the-max-user-process-value)
참고
. http://stackoverflow.com/questions/9361816/maximum-number-of-processes-in-linux
피드 구독하기:
댓글 (Atom)
FIX :: ssh 접속이 느리고, /var/log/messages에 systemd-logind.service failed. 메시지가 남을 때
ssh 접속이 느릴 때가 있습니다. 보통은DNS가 제대로 설정되지 않았는데 /etc/ssh/sshd_config에 UseDNS가 yes로 되어 있을 때 발생합니다. 위와 같을 경우 /etc/ssh/sshd_config파일에서 아래와 같이 수정 후 ...
-
ssh 접속이 느릴 때가 있습니다. 보통은DNS가 제대로 설정되지 않았는데 /etc/ssh/sshd_config에 UseDNS가 yes로 되어 있을 때 발생합니다. 위와 같을 경우 /etc/ssh/sshd_config파일에서 아래와 같이 수정 후 ...
-
. BONDING_OPTS에 xmit_hash_policy=layer3+4옵션을 추가한다. . switch의 load balancing 알고리즘도 같이 변경해야 한다. Linux bonding 설정 Linux bonding을 LACP (mode...
-
yum update를 진행하다가 더이상 진행이 되지 않는 경우가 있다. 원인은 여러가지가 있을 수 있으나 내 경험상 아래의 경우가 대부분이다. a. update중 ssh 세션이 종료 b. Ctrl+c 로 update 진행을 중단한 경우 ...
댓글 없음:
댓글 쓰기