ElasticsearchのNative controller process has stopped

普通にUbuntuのDockerで公式のElasticsearchを使ってコンテナを作成しようとしたら、下記のようなエラーが発生。

$ docker run docker.elastic.co/elasticsearch/elasticsearch:6.1.3
[2018-02-04T06:28:59,001][INFO ][o.e.n.Node               ] [] initializing ...
[2018-02-04T06:28:59,078][INFO ][o.e.e.NodeEnvironment    ] [JmjyfGg] using [1] data paths, mounts [[/ (none)]], net usable_space [38gb], net total_space [46.6gb], types [aufs]
[2018-02-04T06:28:59,079][INFO ][o.e.e.NodeEnvironment    ] [JmjyfGg] heap size [1007.3mb], compressed ordinary object pointers [true]
[2018-02-04T06:28:59,080][INFO ][o.e.n.Node               ] node name [JmjyfGg] derived from node ID [JmjyfGgLSFOec2dS4ru6Wg]; set [node.name] to override
[2018-02-04T06:28:59,081][INFO ][o.e.n.Node               ] version[6.1.3], pid[1], build[af51318/2018-01-26T18:22:55.523Z], OS[Linux/4.4.0-87-generic/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/1.8.0_161/25.161-b14]

 (中略)

[2018-02-04T06:29:05,723][INFO ][o.e.b.BootstrapChecks    ] [JmjyfGg] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2018-02-04T06:29:05,736][INFO ][o.e.n.Node               ] [JmjyfGg] stopping ...
[2018-02-04T06:29:05,747][INFO ][o.e.n.Node               ] [JmjyfGg] stopped
[2018-02-04T06:29:05,748][INFO ][o.e.n.Node               ] [JmjyfGg] closing ...
[2018-02-04T06:29:05,759][INFO ][o.e.n.Node               ] [JmjyfGg] closed
[2018-02-04T06:29:05,762][INFO ][o.e.x.m.j.p.NativeController] Native controller process has stopped - no new native processes can be started
$ 

vm.max_map_countというパラメータにセットされた値が小さいことがエラーの原因だとわかりました。

解決

解決方法はGithubのissueにありました。

github.com

sudo sysctl -w vm.max_map_count=262144を実行し、値を変更したら無事動くようになりました。

メモ

sysctlカーネルパラメータを表示したり変更したりするコマンド。で、vm.max_map_countはプロセスによって使用される仮想メモリのメモリマップ数の上限を示しています。この値はデフォルトでは65535です。

Elasticsearchではインデクスを格納するのにmmapfsを使用しており、そのためにvm.max_map_countの上限を上げなければいけないみたいです。

www.elastic.co