6.1. 「mmap Cannot allocate memory」エラーを回避するにはどうしたらよいですか？ — Mroonga vmrn_version documentation

本文へスキップ
`Ctrl`+`K`

# 6.1. 「mmap Cannot allocate memory」エラーを回避するにはどうしたらよいですか？

## 6.1.1. 短い回答

`vm.max_map_count` Linuxカーネルパラメーターの値を増やしてください。

## 6.1.2. 長い回答

ログファイルに以下のようなmmapエラーが存在する場合があります。:

    2013-06-04 08:19:34.835218|A|4e86e700|mmap(4194304,551,432017408)=Cannot allocate memory <13036498944>

`<13036498944>` はこの場合mmapの合計サイズ(約12GB)です。

以下の観点を確認する必要があります。

- 十分なメモリの空きが存在するか?

- マッピング最大数を超過していないか?

十分な空きメモリがあるかを調べるために、`vmstat` コマンドを使うことができます。

最大マッピング数を超過しているかどうかを確認するために、 `vm.max_map_count` の値を調べることができます。

もしこの問題が `vm.max_map_count` の値を調整することで解決するなら、これが原因です。

Groongaはメモリを256KBごとに確保するので、扱えるデータベースのサイズを以下の式で見積ることができます:

    (database size) = vm.max_map_count * (memory chunks)

16GBを超えるデータベースを扱うには、少くとも65536を `vm.max_map_count` の値として設定しないといけません。

    database size (16GB) = vm.max_map_count (65536) * memory chunks (256KB)

`sudo sysctl -w vm.max_map_count=65536` で一時的に `vm.max_map_count` を調整することができます。

その後、設定値を `/etc/sysctl.conf` もしくは `/etc/sysctl.d/*.conf` へと保存します。