2.X/7. Administration Monitoring Deployment

7-2-8. File Descriptors and MMap

drscg 2017. 9. 23. 12:09

Lucene uses a very large number of files. At the same time, Elasticsearch uses a large number of sockets to communicate between nodes and HTTP clients. All of this requires available file descriptors.

Lucene은 매우 많은 수의 파일을 사용한다. 동시에, Elasticsearch는 node와 HTTP 클라이언트 사이의 통신을 위해 많은 socket을 사용한다. 이것 모두는 사용 가능한 file descriptor가 필요하다.

Sadly, many modern Linux distributions ship with a paltry 1,024 file descriptors allowed per process. This is far too low for even a small Elasticsearch node, let alone one that is handling hundreds of indices.

하지만, 현대의 많은 linux 배포판은 프로세스 별로 겨우 1,024개의 file descriptor를 제공한다. 이것은, 수백개의 indices를 다루는 node는 말할 것도 없고, 조그마한 Elasticsearch node에게도 너무 적다.

You should increase your file descriptor count to something very large, such as 64,000. This process is irritatingly difficult and highly dependent on your particular OS and distribution. Consult the documentation for your OS to determine how best to change the allowed file descriptor count.

64,000처럼, 매우 큰 값으로 file descriptor를 늘려야 한다. 이 과정은 약간 어렵고, OS나 배포판에 크게 의존한다. 허용되는 file descriptor의 수를 변경하는 최선의 방법을 알아보기 위해, OS 설명서를 참조하자.

Once you think you’ve changed it, check Elasticsearch to make sure it really does have enough file descriptors:

그것을 변경했다면, 정말로 충분한 file descriptor를 가지고 있는지를 보기 위하여, Elasticsearch를 확인해 보자. 다음과 같이 확인할 수 있다.

{
  "cluster_name": "elasticsearch",
  "nodes": {
    "nLd81iLsRcqmah-cuHAbaQ": {
      "timestamp": 1471516160318,
      "name": "Marsha Rosenberg",
      "transport_address": "127.0.0.1:9300",
      "host": "127.0.0.1",
      "ip": [
        "127.0.0.1:9300",
        "NONE"
      ],
      "process": {
        "timestamp": 1471516160318,
        "open_file_descriptors": 155,
        "max_file_descriptors": 10240, 
        "cpu": {
          "percent": 0,
          "total_in_millis": 25084
        },
        "mem": {
          "total_virtual_in_bytes": 5221900288
        }
      }
    }
  }
}

max_file_descriptors field는 Elasticsearch 프로세스가 액세스할 수 있는, 이용 가능한 descriptors의 수를 알려준다.

Elasticsearch also uses a mix of NioFS and MMapFS for the various files. Ensure that you configure the maximum map count so that there is ample virtual memory available for mmapped files. This can be set temporarily:

Elasticsearch는 또한, 다양한 파일을 위해, NioFS와 MMapFS를 섞어 사용한다. mmapped 파일을 위해, 이용할 수 있는 충분한 가상 메모리가 있는지 확인하기 위하여, 최대 map count를 확인하자. 이것을 일시적으로 설정하려면, 아래와 같이 한다.

sysctl -w vm.max_map_count=262144

Or you can set it permanently by modifying vm.max_map_count setting in your /etc/sysctl.conf.

또는 /etc/sysctl.conf 파일에서 vm.max_map_count 를 변경하여, 영구적으로 설정할 수 있다.