ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 부트스트랩 체크
    검색/ElasticSearch 2021. 8. 26. 16:15
    반응형
    #부트스트랩 체크
    ES 5.0 부터 인스턴스가 시작할 때 부트스트랩 체크라는 장치가 도입되었다. 의도하지 않은 설정 미스를 미리 검출하는 목적을 가지고 있다. 예를들어 -Xms 와 -Xmx 의 값이 다르면 ES 가동이 실패한다.

    1. Heap size check

    엘라스틱서치는 기본적으로 큰 메모리를 사용하기 때문에 처음부터 기본 힙크기와 최대 힙크기 값을 같게 설정하는 것이 좋다. 시스템을 운영하는 중에 힙 크기 조정이 일어날 경우 시스템이 일시 정지할 위험성이 있기 때문이다.

    • jvm.options 에 설정된 기본힙과 최대힙 :

    • 최근 일주일 힙 사용량 :

    2. File descriptor check (File Descriptors )

    #파일 디스크립터
    리눅스/유닉스 환경에서는 모든 작업이 파일로 처리된다. 일반적인 파일, 소켓, 시스템 콜 등의 파일 처리에 사용하는 것이 파일 디스크립터이다.

    Elasticsearch는 많은 파일 디스크립터 또는 파일 핸들을 사용한다. 파일 디스크립터가 부족하면 문제가 발생할 수 있으며 대부분 데이터 손실로 이어진다. 오픈 파일 디스크립터 수의 제한을 65,536 또는 그 보다 높게 설정하는 것이 좋다.

    • 설정된 파일 디스크립터 수 확인 :
    GET _nodes/stats/process?filter_path=**.max_file_descriptors
    • 사용중인 파일 디스크립터 수 확인 :
    # 사용중인 파일 디스크립터
    lsof -p [PID] | grep -v -e '^COMMAND ' | wc -l

     

    3. 메모리 락 체크 (Memory lock check )

    JVM이 Major GC를 할때 heap의 모든 페이지를 검사한다. 만약 이때 힙을 구성하는 메모리 페이지 조각 중 하나라도 디스크에 swap-out되어 있다면 이를 메모리에 다시 올리는 swap-in작업을 반드시 해야한다.

    swap-in/swap-out 작업은 disk thrashing을 야기한다. swapping은 퍼포먼스와 노드 안정성에 나쁜 영향을 미치므로 무슨 수를 쓰더라도 피해야한다.( → Disable swapping )

    # thrashing(스래싱)
    스래싱은 컴퓨터의 가상 메모리 리소스가 과도하게 사용되어 페이징 및 페이지 오류가 지속적으로 발생하여 대부분의 응용 프로그램 수준 처리를 방해 할 때 발생합니다. 이로 인해 컴퓨터 성능이 저하되거나 축소됩니다.
    • elasticsearch.yml에 bootstrap.memory_lock: true 가 설정 되어있는지 확인 :

    4. 최대 스레드 수 체크 (Maximum number of threads check)

    엘라스틱서치는 대량의 요청을 빠르게 처리하기 위해 요청을 스테이지(generic, index, search, get, analyze…) 단위로 분할하여 각각 다른 Thread Pool Executors로 다룬다.

    모든 Thread Pool Executor가 여유롭게 스레드를 생성할 수 있도록 엘라스틱 서치가 최소 4096개 이상의 스레드를 생성할 수 있도록 설정하는 것이 좋다.

    Thread 사용 정보 (jn-live-elasticsearch-001 )

      • /etc/security/limits.conf 에 다음 설정
        • elastic hard nproc 4096
        • elastic soft nproc 4096
        • limits.conf에 설정되어있지 않지만, elastic계정에 max-user-processes4096으로 설정 되어있는 것을 확인함.

    5. 최대 파일 크기 체크 (Max file size check )

    리눅스에서는 하나의 파일이 가질 수 있는 최대 파일 크기를 관리한다. 엘라스틱서치가 생성하는 세그먼트 파일과 트랜스로그 파일은 상황에 따라 수십GB이상으로 커질 수도 있으므로

    최대 파일 크기를 무제한(unlimit)으로 설정하는 것이 좋다.( using the fsize setting to unlimited )

    • 설정 방법
      • /etc/security/limits.conf 에 다음 설정
        • elastic hard fsize unlimited
        • elastic soft fsize unlimited
        • limits.conf에 설정되어있지 않지만, elastic계정에 file-sizeunlimited로 설정 되어있는 것을 확인함. 

     

    6. 최대 가상 메모리 크기 체크 (Maximum size virtual memory check )

    엘라스틱서치와 루씬은 인덱스 생성 및 관리의 효율을 위해 mmap을 사용해서 메모리 매핍을 수행한다. mmap을 이용하면 JVM을 통하지 않고도 리눅스 커널로 직접 시스템 콜을 실행할 수 있다.

    고성능 자바 애플리케이션에서 많이 사용한다.

    mmap은 커널 레벨의 메모리를 직접 할당받아 애플리케이션의 가상 메모리 주소에 매핑해서 동작하기 때문에 가상메모리 크기에 제한이 없는 것이 유리하다.

    • /etc/security/limits.conf 에 다음 설정 확인 :

    7. mmap 카운트 체크 (Maximum map count check )

    엘라스틱서치가 mmap를 효과적으로 사용하기 위해서 적어도 262,144개의 메모리맵 영역을 생성할 수 있도록 설정해준다.

    • 다음 명령어로 확인 :
    cat /proc/sys/vm/max_map_count

    8. Client JVM check

    OpenJDK-derived JVMs는 Server JVM과 Client JVM을 제공한다. 서버(server) VM은 기본적으로 아주 큰 힙(Heap), 패러럴 가비지 컬렉터(parallel garbage collector)를 사용하고 실행타임에서 좀 더 공격적으로 코드를 최적화 한다. 클라이언트(client) VM은 좀 더 보수적인데, 그 결과 좀 시작 타임이 짧아지고 메모리를 좀 더 적게 사용한다.

    엘라스틱서치가 Server VM에서 실행 되었는지 확인한다.

    9. Serial Collector 사용 여부 체크(Use serial collector check)

    엘라스틱 서치는 대용량의 힙 메모리를 사용하기 때문에 Serial GC를 사용하면 성능이 크게 저하될 수 있으므로 사용하면 안된다.

    반응형
Designed by Tistory.