반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

스와핑 비활성화 본문

ElasticStack/System

스와핑 비활성화

닉의네임 2020. 8. 11. 17:57
반응형

스와핑 비활성화

대부분의 운영 체제는 파일 시스템 캐시에 가능한 한 많은 메모리를 사용하고 사용되지 않는 응용 프로그램 메모리를 열심히 교체하려고합니다. 이로 인해 JVM 힙의 일부 또는 실행 가능한 페이지가 디스크로 스왑 될 수 있습니다.

스와핑은 성능과 노드 안정성에 매우 나쁘기 때문에 어떤 대가를 치르더라도 피해야합니다. 가비지 수집 이 밀리 초가 아닌 몇 분 동안 지속될 수 있으며 노드가 느리게 응답하거나 클러스터에서 연결이 끊어 질 수 있습니다. 탄력적 인 분산 시스템에서는 운영 체제가 노드를 죽 이도록하는 것이 더 효과적입니다.

스와핑을 비활성화하는 방법에는 세 가지가 있습니다. 선호되는 옵션은 스왑을 완전히 비활성화하는 것입니다. 이것이 옵션이 아닌 경우 스왑 파이 최소화와 메모리 잠금을 선호할지 여부는 환경에 따라 다릅니다.

모든 스왑 파일 비활성화

일반적으로 Elasticsearch는 상자에서 실행되는 유일한 서비스이며 메모리 사용량은 JVM 옵션에 의해 제어됩니다. 스왑을 활성화 할 필요가 없습니다.

Linux 시스템에서는 다음을 실행하여 일시적으로 스왑을 비활성화 할 수 있습니다.

sudo swapoff -a

Elasticsearch를 다시 시작할 필요가 없습니다.

 

영구적으로 비활성화하려면 /etc/fstab파일 을 편집 하고 단어가 포함 된 모든 줄을 주석 처리해야합니다

 swap.

 

Windows에서는 .NET을 통해 페이징 파일을 완전히 비활성화하여 동일한 기능을 수행 할 수 있습니다 System Properties → Advanced → Performance → Advanced → Virtual memory.

구성 swappiness

Linux 시스템에서 사용할 수있는 또 다른 옵션은 sysctl 값 vm.swappiness이로 설정되어 있는지 확인하는  1입니다. 이것은 커널의 스왑 경향을 줄이고 정상적인 상황에서 스와핑으로이어서는 안되며 전체 시스템이 비상 상황에서 스왑되도록 허용합니다.

vm.swappiness=1

활성화 bootstrap.memory_lock

또 다른 옵션은 Linux / Unix 시스템에서 mlockall 을 사용 하거나 Windows에서 VirtualLock 을 사용하여 프로세스 주소 공간을 RAM에 잠그고 Elasticsearch 메모리가 스왑되는 것을 방지하는 것입니다. config/elasticsearch.yml파일에 다음 행을 추가하면 됩니다.

bootstrap.memory_lock: true

mlockall 사용 가능한 것보다 많은 메모리를 할당하려고하면 JVM 또는 쉘 세션이 종료 될 수 있습니다!

Elasticsearch를 시작한 후이 mlockall요청의 출력에서 의 값을 확인하여이 설정이 성공적으로 적용되었는지 확인할 수 있습니다 .

GET _nodes?filter_path=**.mlockall

 

당신이 표시되는 경우 mlockall입니다 false, 그때는 것을 의미한다 mlockall 요청이 실패했습니다. 로그에라는 단어가 포함 된 자세한 정보가있는 줄도 표시됩니다 Unable to lock JVM Memory.

Linux / Unix 시스템에서 가장 가능성이 높은 이유는 Elasticsearch를 실행하는 사용자에게 메모리 잠금 권한이 없기 때문입니다. 다음과 같이 부여 할 수 있습니다.

 

.zip  .tar.gz설정 ulimit -l unlimited

 

Elasticsearch, 또는 세트를 시작하기 전에 루트로 memlock에 unlimited에서 /etc/security/limits.conf.

RPM 및 Debian설정 MAX_LOCKED_MEMORY에 unlimited에서 시스템 구성 파일 (또는 사용하는 시스템은 아래 참조 systemd).사용하는 시스템 systemd설정 LimitMEMLOCK에 infinity에 systemd 구성 .

 

mlockall실패 할 수있는 또 다른 가능한 이유는 JNA 임시 디렉토리 (일반적으로의 하위 디렉토리 /tmp)가 noexec옵션으로 마운트되기 때문 입니다. ES_JAVA_OPTS환경 변수를 사용하여 JNA에 대한 새 임시 디렉토리를 지정하면이 문제를 해결할 수 있습니다 .

 

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djna.tmpdir=<path>"
./bin/elasticsearch

 

또는 jvm.options 구성 파일에서이 JVM 플래그를 설정합니다.

 

반응형

'ElasticStack > System' 카테고리의 다른 글

Elasticsearch 7.9.2 multi hosts  (0) 2021.07.06
DNS 캐시 설정  (0) 2020.08.12
스레드 수  (0) 2020.08.12
가상 메모리  (0) 2020.08.12
파일 설명자  (0) 2020.08.12
Comments