Elastic Stack

elasticsearch 성능 향상 시키기

iiliiiili 2022. 7. 8. 13:42

1. elk stack 버전업

7.16 -> 8.2.3

 

2. jdk 버전업

openjdk 1.8 -> openjdk 17

 

3. CMS GC-> G1GC 적용

$ cat /etc/elasticsearch/jvmoptions

# CMSGC 설정 주석
## GC configuration
#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly


# G1GC 설정
## set G1GC configuration
-XX:+UseG1GC

 

https://d2.naver.com/helloworld/37111

CMS GC? (Concurrent Mark-Sweep)

  • Application의 Thread와 GC Thread가 동시에 실행되어 STW를 최소화 하는 GC이다. Parallel GC와 가장 큰 차이점은 Compaction 작업 유무로 구분될 수 있다. Compaction은 메모리 공간에서 사용하지 않는 빈 공간이 없도록 옮겨서 메모리 분산을 제거하는 작업을 의미한다.
  • CMS GC는 Compacton을 지원하지 않는다.

G1 GC(Garbage first)

CMS GC를 대체하기 위해 새롭게 등장하였으며, 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었다. 빠른 처리 속도를 지원하면서 STW를 최소화한다. CMS GC보다 효율적으로 동시에 Application과 GC를 진행할 수 있고, 메모리 Compaction 과정까지 지원하고 있다. Java 9 버전부터 기본 GC 방식으로 채택되었다.

  • 장점
    • 별도의 STW 없이도 여유 메모리 공간을 압축하는 기능을 제공한다. 또한, 전체 Old Generation 혹은 Young Generation 통째로 Compaction을 할 필요 없고, 해당 Generation의 일부분 Region에 대해서만 Compaction을 하면 된다.
    • Heap 크기가 클수록 잘 동작한다.
    • CMS의 비해 개선된 알고리즘을 사용하고, 처리 속도가 더 빠르다.
    • Garbage로 가득찬 영역을 빠르게 회수하여 빈 공간을 확보하므로 GC 빈도가 줄어든다.
  • 단점
    • 공간 부족 상태를 조심해야 한다. (Minor GC, Major GC 수행하고 나서도 여유 공간이 부족한 경우)
      • 이때는 Full GC가 발생하는데, 이 GC는 Single Thread로 동작한다.
      • Full GC는 heap 전반적으로 GC가 발생하는 것을 뜻한다.
    • 작은 Heap 공간을 가지는 Application에서는 제 성능을 발휘하지 못하고 Full GC가 발생한다.
    • Humonogous 영역은 제대로 최적화되지 않으므로 해당 영역이 많으면 성능이 떨어진다.

 

4. 사용하지 않는 인덱스 close 처리

- 눈에 띄는 성능 향상을 보려면 index close 처리가 가장 중요함(특히 인덱스 asterisk 검색 많이 하는 환경에선 필수임)