Elasticsearch 스 레 드 풀 소개

4310 단어 elasticsearch
모든 Elasticsearch 노드 내부 에 index, search, get, bulk 등 여러 개의 스 레 드 탱크 가 유지 되 고 있 습 니 다. 사용 자 는 스 레 드 탱크 의 유형 과 크기 를 수정 할 수 있 습 니 다. 스 레 드 탱크 의 기본 크기 는 CPU 논리 와 일치 합 니 다. 본 고 는 최신 Elasticsearch 2.3. x 를 바탕 으로 합 니 다.
1. 현재 스 레 드 그룹 상태 보기
curl -XGET 'http://localhost:9200/_nodes/stats?pretty'
"thread_pool" : {
    "bulk" : {
      "threads" : 32,
      "queue" : 0,
      "active" : 0,
      "rejected" : 0,
      "largest" : 32,
      "completed" : 659997
    },
"index" : {
      "threads" : 2,
      "queue" : 0,
      "active" : 0,
      "rejected" : 0,
      "largest" : 2,
      "completed" : 2
    }

위 에서 일부 스 레 드 탱크 의 설정 을 캡 처 했 습 니 다. 그 중에서 가장 주목 해 야 할 것 은 rejected 입 니 다.어떤 스 레 드 풀 active = = threads 는 모든 스 레 드 가 바쁘다 는 것 을 표시 합 니 다. 그러면 다음 새로운 요청 은 quue 에 들 어 갑 니 다. 즉, quue > 0 입 니 다. bulk 의 quue 기본 50 과 같은 quue 크기 가 제한 을 초과 하면 elasticsearch 프로 세 스 는 요청 을 거부 합 니 다 (bulk HTTP 상태 코드 429 에 부 딪 히 면 해당 하 는 거부 횟수 는 rejected 에 누적 됩 니 다.
해결책 은
1. 실패 한 요청 을 기록 하고 다시 보 내기
2. 동시 작성 프로 세 스 개 수 를 줄 이 고 매번 bulk 요청 의 size 를 증가 합 니 다.
2. 핵심 스 레 드 탱크
generic: node discovery 와 같은 일반적인 동작 입 니 다.그것 의 유형 은 기본적으로 cached 입 니 다.index: 이 스 레 드 탱크 는 색인 과 삭제 작업 에 사 용 됩 니 다.그것 의 종 류 는 기본적으로 fixed 이 고, size 는 기본적으로 사용 가능 한 프로세서 의 수량 이 며, 대기 열의 size 는 기본적으로 200 이다.search: 이 스 레 드 탱크 는 검색 과 계수 요청 에 사 용 됩 니 다.그것 의 유형 은 기본적으로 fixed 이 고, size 는 기본적으로 (사용 가능 한 프로세서 의 수량 * 3) / 2) + 1 이 며, 대기 열의 size 는 기본적으로 1000 입 니 다.suggest: 이 스 레 드 탱크 는 제안 기 요청 에 사 용 됩 니 다.그것 의 종 류 는 기본적으로 fixed 이 고, size 는 기본적으로 사용 가능 한 프로세서 의 수량 이 며, 대기 열의 size 는 기본적으로 1000 이다.get: 이 스 레 드 탱크 는 실시 간 GET 요청 에 사 용 됩 니 다.그것 의 종 류 는 기본적으로 fixed 이 고, size 는 기본적으로 사용 가능 한 프로세서 의 수량 이 며, 대기 열의 size 는 기본적으로 1000 이다.bulk: 이 스 레 드 탱크 는 대량 작업 에 사 용 됩 니 다.그것 의 종 류 는 기본적으로 fixed 이 고, size 는 기본적으로 사용 가능 한 프로세서 의 수량 이 며, 대기 열의 size 는 기본적으로 50 이다.percolate: 이 스 레 드 탱크 는 사전 매 칭 기 작업 에 사 용 됩 니 다.그것 의 종 류 는 기본적으로 fixed 이 고, size 는 기본적으로 사용 가능 한 프로세서 의 수량 이 며, 대기 열의 size 는 기본적으로 1000 이다.
3. 스 레 드 탱크 유형
1、cached
모든 요청 에 스 레 드 를 만 들 기 위해 무제 한 스 레 드 탱크 입 니 다.이 스 레 드 풀 은 요청 이 막 히 거나 거부 되 는 것 을 방지 하기 위해 서 입 니 다. 모든 스 레 드 는 시간 초과 (keep alive) 가 있 습 니 다. 기본 5 분 입 니 다. 시간 이 초과 되면 회수 / 종 료 됩 니 다.elasticsearch 의 generic 스 레 드 탱크 는 이 유형 을 사용 합 니 다.최근 5.0.0 - alpha 2 버 전에 서 이 유형의 스 레 드 풀 을 제거 한 것 으로 밝 혀 졌 다.
threadpool:
    generic:
        keep_alive: 2m

2、fixed
고정 크기 의 스 레 드 탱크 가 있 습 니 다. 크기 는 size 속성 으로 지정 되 어 있 습 니 다. 기본 값 은 5 * cores 수 입 니 다. 요청 을 수행 할 때 까지 대기 열 (quue size 속성 지정, 기본 값 은 - 1, 즉 무제 한) 을 지정 할 수 있 습 니 다.Elasticsearch 에서 요청 을 대기 열 에 넣 을 수 없다 면 이 요청 은 거 부 됩 니 다.
threadpool:
    index:
        size: 30
        queue_size: 1000

3、scaling
가 변 크기 의 pool, 크기 는 부하 에 따라 1 부터 size 사이, 같은 keepalive 매개 변 수 는 유 휴 스 레 드 가 회수 되 는 시간 을 지정 합 니 다.
threadpool:
    warmer:
        size: 8
        keep_alive: 2m

4. 스 레 드 탱크 설정 수정
1、elasticsearch.yml
threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500

2、Rest API
curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient": {
        "threadpool.index.type": "fixed",
        "threadpool.index.size": 100,
        "threadpool.index.queue_size": 500
    }
}'

5. bulk 이상 검사
es bulk api 타 임 스 를 사용 하면 다음 과 같 습 니 다.
4. 567913. 이 오 류 는 기본 크기 가 50 인 대기 열 (queue) 에서 처리 할 수 없 음 이 분명 합 니 다. 해결 방법 은 bulk 대기 열의 길 이 를 늘 리 는 것 입 니 다.
elasticsearch.yml
EsRejectedExcutionException[rejected execution(queue capacity 50) on.......]

총화
Elasticsearch 의 스 레 드 탱크 는 자바 자체 의 패키지 입 니 다. 사용 자 는 관련 설정 을 변경 할 수 있 지만 공식 적 으로 기본 값 을 수정 하 는 것 을 강력 히 권장 하지 않 습 니 다. 왜 다음 세 번 째 글 을 읽 을 수 있 습 니까?
관련 문서
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html
https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_these_settings.html#_threadpools

좋은 웹페이지 즐겨찾기