-
Elasticsearch GC 변경 계획 (CMS-> G1GC)검색/ElasticSearch 2021. 8. 26. 16:44반응형
CMS와 G1GC :Java Garbage Collection
G1GC 상세 :Java HotSpot VM G1GC
작업 방향
자바 버전 업그레이드 :
- Elasticsearch 버전 별 지원 JDK 정보 Elastic Support Matrix | Elasticsearch
- Elasticsaerch6.5.4 버전은 1.8을 제외하면 JDK11 버전을 지원한다.
jvm.options 변경 :
다음 CMS GC를 주석처리 한다.
G1GC 활성화 :
G1GC 설정 :
일반적인 권장 사항 : 가급적이면 기본 설정으로 사용할 것.
옵션 및 기본값 -XX:MaxGCPauseMillis=200 최대 일시 정지 시간 목표. 기본값은 200ms. -XX:GCPauseTimeInterval=<ergo> 일시 정지 시간 "최대 간격" 목표 이 값은 기본값이 없어서, 최악의 경우 G1이 GC를 끊임없이 계속 수행할 수도 있다. -XX:ParallelGCThreads = <ergo> 일시 정지 중 parallel 작업에 사용되는 최대 스레드 갯수. 사용 가능한 프로세서 수가 8보다 작으면 그대로 지정한 값을 사용하고, 그 외의 경우는 5/8 만큼의 스레드를 추가로 사용한다. 예를 들어 사용 가능한 프로세서 수가 13 개라면 8+(13−8)×5/8=11.125 이므로, 11 개의 스레드를 사용한다. 일시 정지 상태로 들어갔을 때 사용되는 최대 스레드의 수는 최대 토탈 heap 사이즈에 의해 제한을 받는다. -XX:HeapSizePerGCThread 옵션으로 지정된 GC 스레드가 담당할 heap 사이즈의 최대값에 영향을 받는다. -XX:ConcGCThreads=<ergo> 동시 작업에 사용하는 최대 스레드 수. 이 값은 -XX:ParallelGCThreads를 4로 나눈 값이다. -XX:+G1UseAdaptiveIHOP, -XX:InitiatingHeapOccupancyPercent=45 IHOP 관련 설정. -XX:G1HeapRegionSize=<ergo> 영역 하나의 사이즈. 기본적으로는 최대 heap 사이즈 1/2048 만큼의 계산된 사이즈를 갖는다. 굳이 설정을 한다면 1 ~ 32MB 정도로 설정할 수 있으며, 2의 거듭제곱 값이어야 한다. -XX:G1NewSizePercent=5, -XX:G1MaxNewSizePercent=60 young gen의 총 사이즈는 이 두 값 사이에서 변화한다. -XX:G1HeapWastePercent=5 The allowed unreclaimed space in the collection set candidates as a percentage. G1 stops the space-reclamation phase if the free space in the collection set candidates is lower than that. -XX:G1MixedGCCountTarget=8 The expected length of the space-reclamation phase in a number of collections. -XX:G1MixedGCLiveThresholdPercent=85 라이브 객체 점유율이 이 값보다 높은 old gen은 space-reclamation 단계에서 수집되지 않는다. 튜닝 여기에 나오는 지침들은 훑어보고 감 잡는 용으로만 쓰고, 실제로 튜닝을 하려면 문서를 직접 읽고 충분히 테스트하도록 하자. 일반적인 권장 사항 가급적이면 기본 설정으로 사용할 것. 필요하다면 -Xmx 옵션으로 최대 heap 사이즈를 넉넉하게 설정할 것. -Xmn, -XX:NewRatio 옵션으로 young gen의 사이즈를 설정하지 말 것. 이 사이즈 목표가 일시 중지 시간 목표보다 우선하게 되며, 일시 중지 시간 목표는 비활성화된다. GC 튜닝시 처리량과 정지 시간 사이의 상충 관계를 염두에 둘 것. G1은 90%의 애플리케이션 시간과 10%의 GC 시간을 목표로 한다(Parallel GC의 경우 99%의 애플리케이션 시간과 1%의 GC 시간 목표). 따라서 처리량을 늘리고자 한다면 일시 정지 시간 목표를 어느 정도 느슨하게 해줘야 한다. G1 퍼포먼스 향상 가장 중요한 것은 로그. -Xlog:gc*=debug 옵션으로 로그를 보도록 하자.
작업 순서
java 버전 체크 :
[elastic@jn-elasticsearch-dev-01 share]$ java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
사용 중인 자바 위치 체크 :
[elastic@jn-elasticsearch-dev-02 share]$ which java /bin/java
/bin/java 디렉터리 확인 :
java 버전이 alternatives로 관리 되고 있음을 확인
[elastic@jn-elaseicsearch-dev-03 share]$ ls -alrt /bin/java lrwxrwxrwx 1 root root 22 5월 11 2020 /bin/java -> /etc/alternatives/java [ec2-user@jn-elasticsearch-dev-01 etc]$ alternatives --config java 1 개의 프로그램이 'java'를 제공합니다. 선택 명령 ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.amzn2.0.1.x86_64/jre/bin/java)
jdk를 원하는 위치에 설치하고 alternatives에 패키지 등록 :
Archived OpenJDK GA Releases (https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz)
####### jdk11 설치 ####### [root@jn-elasticsearch-dev-01 ec2-user]# cd /usr/share [root@jn-elasticsearch-dev-01 share]# mkdir java-11.0.2 [root@jn-elasticsearch-dev-01 share]# cd java-11.0.2/ # 다운로드 [root@jn-elasticsearch-dev-01 java-11.0.2]# wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz --2021-06-17 16:50:42-- https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz Resolving download.java.net (download.java.net)... 104.109.240.89 Connecting to download.java.net (download.java.net)|104.109.240.89|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 187513052 (179M) [application/x-gzip] Saving to: ‘openjdk-11.0.2_linux-x64_bin.tar.gz’ 100%[==========================================================================================================================>] 187,513,052 127MB/s in 1.4s 2021-06-17 16:50:43 (127 MB/s) - ‘openjdk-11.0.2_linux-x64_bin.tar.gz’ saved [187513052/187513052] # 압축 해제 [root@jn-elasticsearch-dev-01 java-11.0.2]# tar -xvf openjdk-11.0.2_linux-x64_bin.tar.gz ####### alternatives에 등록 ####### [root@jn-elasticsearch-dev-01 bin]# alternatives --help 대체 버전 1.7.4 - Copyright (C) 2001 Red Hat, Inc. GNU Public License하에 이 프로그램을 자유롭게 재배포 할 수 있습니다. usage: alternatives --install <link> <name> <path> <priority> [--initscript <service>] [--family <family>] [--slave <link> <name> <path>]* alternatives --remove <name> <path> alternatives --auto <name> alternatives --config <name> alternatives --display <name> alternatives --set <name> <path> alternatives --list common options: --verbose --test --help --usage --version --keep-missing --altdir <directory> --admindir <directory> # alternative에 등록 [root@jn-elasticsearch-dev-01 bin]# alternatives --install /usr/bin/java java /usr/share/java-11.0.2/jdk-11.0.2/bin/java 100 # java11 선택 [root@jn-elasticsearch-dev-01 bin]# alternatives --config java 2 개의 프로그램이 'java'를 제공합니다. 선택 명령 ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.amzn2.0.1.x86_64/jre/bin/java) 2 /usr/share/java-11.0.2/jdk-11.0.2/bin/java 현재 선택[+]을 유지하려면 엔터키를 누르고, 아니면 선택 번호를 입력하십시오:2 # java11이 default로 선택 되었는지 확인 [root@jn-elasticsearch-dev-01 bin]# java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
GC 변경
# 계정 변경 [root@jn-elasticsearch-dev-01 ~]# sudo su elastic # elasticsearch config 위치로 이동 [elastic@jn-elasticsearch-dev-01 ~]cd /elastic/elasticsearch/config [elastic@jn-elasticsearch-dev-01 config]$ vi jvm.options =========================== # CMSGC 설정 주석 ## GC configuration #-XX:+UseConcMarkSweepGC #-XX:CMSInitiatingOccupancyFraction=75 #-XX:+UseCMSInitiatingOccupancyOnly # G1GC 설정 ## set G1GC configuration -XX:+UseG1GC ===========================
G1GC 반영을 위한 elasticsearch 재시작 :
https://mondayus.tistory.com/54
모니터링 :
설정을 반영한 2021-06-17 17:25 이후 다음과 같이 CMS GC양상(mainGC가 발생할 때 급격한 Heap이 정리)을 띄는지 모니터링을 한다.
반응형'검색 > ElasticSearch' 카테고리의 다른 글
부트스트랩 체크 (0) 2021.08.26 kibana 접속 안될때 (read-only 전환된 상태) (0) 2021.08.26 Search Query Test ( Elasticsearch v6.5.4) (0) 2021.08.26 동의어 등록 테스트 ( nori / Elasticsearch v6.5.4) (0) 2021.08.26 동의어 사전 다중 등록 테스트 (Elasticsearch v6.5.4) (0) 2021.08.26