ElasticSearch 개발 요약-java.lang.OutOfMemory:unable to create new native thread

1983 단어 ElasticSearch

 1.ElasticSearch 대량 인덱스, 클러스터에서 다음 오류 발생

java.lang.OutOfMemoryError: unable to create new native thread
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: unable to create new native thread

스레드를 만들 수 없습니까?이 잘못, 이상해!!!
일반적인 조작은 다음과 같은 사고방식에 따라 해결하기 시작한다
(1) ElasticSearch 및 JDK 버전이 해당하지 않습니까?
홈페이지를 통해 JDK1.8과 ElasticSearch5.4 버전을 조회하는 것은 상응하는 것으로 문제없다.
(2) Stack Overflow 검색에서 관련 내용 발견
elasticsearch JDBC -RIVER java.lang.OutOfMemoryError: unable to create new native thread
안타깝게도 해결 방안이 없어서 쓸모가 없다.
(3) 검색한 결과 몇 개의 댓글이 비교적 믿을 만하다는 것을 발견했다.
Elasticsearch5.4 FAQ 요약
java.lang.OutOfMemoryError:unable to create new native thread 원인 탐색
여기서 두 번째 게시물은 32비트 Java 프로세스 크기가 메모리 주소 공간을 모두 소모했기 때문에 운영 체제에서 로컬 메모리 할당을 거부할 것이라고 언급했습니다.
생각해보니까 방금 빌린 서버가 32비트 운영체제인 것 같아요!!!간단하게 비교해 보면 오류가 발견된다.
64비트 운영 체제 교체를 통해 ElasticSearch 클러스터가 정상입니다.

2. 다음 생각


(1) 32비트 운영체제는 도대체 최대 몇 개의 라인을 만들 수 있습니까?
선배에게 물어보면 32분은 5000개, 64분은 100000개 정도 답이 나온다.이 답안은 검증이 필요하다.
단, ElasticSearch는 반드시 JDK에 의존해야 하며, 자연히 32비트 jdk가 가장 지원하는 스레드 개수를 알아야 한다
그 중에서 jvm 메모리 사용 상한선은 몇 가지 답을 주었다
(2) ElasticSearch는 왜 스레드를 만들 수 없습니까?
ElasticSearch는 색인을 만들고, 검색하고, 색인을 통합하는 등 작업 과정에서 대량의 라인을 만들어야 합니다. 쓰레기 수거기가 라인이 차지하는 공간을 제때에 회수하지 않아서 이 오류를 일으킬 수 있습니다!
elasticsearch를 보십시오.yml 프로필에는 다음과 같은 구성이 있으며 스레드에 대해 설정할 수 있습니다.
threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500

구성을 통해 스레드 개수를 고정시켜 비즈니스 요구 사항을 충족
(3) 스레드 탱크의 유형과 개수는 어떻게 설정합니까?
공식 문서는 다음과 같은 답을 제시했다.
Thread Pool Types
CPU 코어의 최대 두 배로 설정하려면 CPU 코어 수를 주목해야 합니다.
(4) 스레드 탱크 개수에 대한 설정, 생산 환경이라면 신중!!!
홈페이지는 이에 대한 설정을 권장하지 않습니다!!!

3. 매듭


(1) 서버의 개발은 일반적으로 64비트 운영체제를 사용하는데 특히 합병이 높을 때;
(2) 설치 소프트웨어의 버전과 운영체제의 버전이 일치하도록 보장하고 64비트를 사용하는 것이 가장 좋다.
(3) 모든 소프트웨어를 설치하고 홈페이지 안내 설치를 설치하여 버전 불일치로 인한 문제를 근절하는 것을 권장한다.

좋은 웹페이지 즐겨찾기