기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

[오류해결] java.lang.OutOfMemoryError: unable to create new native thread
Java/오류해결

[오류해결] java.lang.OutOfMemoryError: unable to create new native thread

2020. 5. 14. 10:09
반응형

java.lang.OutOfMemoryError: unable to create new native thread 오류 해결

 

이 오류가 발생하는 이유는 Java VM(자바 가상 머신)이 Thread를 생성하는데 너무 많은 Thread를 생성해서 그 이상의 Thread를 생성할 수 없기 때문에 발생하는 오류입니다.

 

제가 프로그래밍을 하면서 코딩을 잘못하게 되면 아래와 같은 현상이 발생합니다.

 

 

 

Thread를 사용할 때 잘못된 코딩으로 Thread가 반복해서 생성이 된 경우입니다.

 

사실 Thread가 무수히 많게 생성이 된 경우가 아니더라도 프로그램이 가지고 있는 자바 가상 머신에 할당된 메모리가 부족할 경우에 java.lang.OutOfMemoryError가 발생할 수 있습니다.

 

이때는 2번째 방법에서 기술한 JVM의 할당된 메모리를 강제적으로 늘리는 방법으로 해결할 수 있습니다.

 

 

1. Thread 생성 코드를 수정

 

첫번째 방법으로는 Thread를 생성하는 쪽의 코드를 수정하는 것입니다.

저 같은 경우는 클라이언트 쪽에서 서버와 계속적인 연결을 필요로 했기 때문에

Thread를 통해 반복적으로 서버와 연결하도록 1초마다 설정했는데 그 부분이 문제가 있어서 코드를 수정함으로 문제를 해결 했습니다.

 

위와 같은 상황은 메모리 누수와 낭비로 이루어지기 때문에 좋지 않은 프로그램입니다.

 

 

 

2. 자바 가상머신의 메모리 할당 설정 변경

 

필수적으로 많은 Thread가 필요할 경우에는 자바 가상머신의 메모리 할당을 강제적으로 늘리는 방법으로 해결합니다.

 

JAVA_OPTS = -Xms128m -Xmx1303m -Xss256k

 

JAVA_OPTS에서 설정을 바꾸는 방법입니다.

Xms는 처음 JVM이 로드될 때 부여하는 메모리

Xmx는 JVM이 가질 수 있는 최대 메모리

Xss는 JVM에서 사용하는 Thread Stack의 크기입니다.

 

Xss는 256k또는 128k, 64k 정도로 줄여도 무관합니다.

 

 

이 옵션을 설정하기 위해서 Eclipse - Run - Run Configurations...

 

 

적용할 프로젝트 선택 - Arguments 탭

 

 

 

VM arguments에 -Xms128m -Xmx1303m -Xss256k 입력 후 Apply.

 

 

 

이렇게 설정하면 Thread가 많이 생성이 되어도 JVM이 가지고 있는 메모리 여유에 한해서는 오류가 발생하지 않습니다만, 첫번째 방법으로 왜 Thread가 많이 생성이 되고 있는지 그 원인을 파악하고 해결하는 것이 좋습니다.

반응형
저작자표시 변경금지 (새창열림)

'Java > 오류해결' 카테고리의 다른 글

[오류해결] No goals have been specified for this build (Maven)  (3) 2020.09.03
[오류해결] java.net.MalformedURLException: no protocol  (1) 2020.06.15
[오류해결] *.jar에 기본 Manifest 속성이 없습니다.  (0) 2020.05.22
    'Java/오류해결' 카테고리의 다른 글
    • [오류해결] No goals have been specified for this build (Maven)
    • [오류해결] java.net.MalformedURLException: no protocol
    • [오류해결] *.jar에 기본 Manifest 속성이 없습니다.
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바