ElasticSearch: 환경설정 중 리소스 문제

문제 상황

./bin/elasticsearch로 ES를 실행했을 때, 두가지 문제가 발생했다.
1. warning과 timeout 로그 출력.
2. 새 터미널에 연결할 수 없거나 응답이 매우 느리다.
3. EC2 콘솔 모니터링에서 cpu 사용량이 매우 높음.


원인

시스템 리소스를 고려하지않은 환경 설정으로 인해 Thrashing이 발생한 것으로 보인다.


해결

디폴트 환경설정이 ES에 할당된 jvm 힙 메모리를 확인하고, 그 값을 그대로 사용한다.


상세 내용

  • 실습 환경의 리소스

  • 클라우드 환경AWS EC2
    인스턴스 유형t2.micro : 프리티어
    CPU1 CORE
    Memory1 GB
  • Elasticsearch의 jvm 힙 메모리 설정을 변경하는 실습을 진행한 후 문제가 발생했다.

vi ./config/jvm.options

-xms512mb
-xms512mb
  • 기존 터미널이 응답하지않아서, putty를 종료했다. 새 터미널 또한 연결이 되지 않았다. AWS EC2 콘솔을 통해 확인해보니 CPU 사용률이 80%를 웃돌았다.

  • 두 개의 터미널을 열고 한 쪽은 ES를 실행하고, 다른 한 쪽은 top를(프로세스를 모니터링하는 명령어) 실행했다. ES 프로세스의 상태를 확인하려했는데 의외의 프로세스를 발견했다.

  • 프로세스 번호가 84고 root에 의해 실행되는 kswapd0 프로세스에 의해 대부분의 cpu가 사용중 이었다.

  • [ stackoverflow에서 찾은 kswapd0 프로세스에 대한 설명 ]
    ES에 필요한 메모리보다 EC2 인스턴스의 물리 메모리가 부족해서 많은 SWAP이 필요했던것으로 보인다. 시스템 리소스 부족으로 인한 Thrashing의 사례라고 볼 수 있을 것 같다.

  • jvm.options의 디폴트 설정값에 의한 heap size를 388mb였다. 이 상태에선 ES가 정상작동한다.

좋은 웹페이지 즐겨찾기