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
へと保存します。