6.1. How to avoid "mmap Cannot allocate memory" error?¶
6.1.1. Short answer¶
vm.max_map_count Linux kernel parameter value.
6.1.2. Long answer¶
There is a case following mmap error in log file:
2013-06-04 08:19:34.835218|A|4e86e700|mmap(4194304,551,432017408)=Cannot allocate memory <13036498944>
<13036498944> means total size of mmap (almost 12GB) in this case.
So you need to confirm following point of views.
- Are there enough free memory?
- Are maximum number of mappings exceeded?
To check there are enough free memory, you can use
To check whether maximum number of mappings are exceeded, you can investigate the value of
If this issue is fixed by modifying the value of
vm.max_map_count, it's exactly the reason.
As Groonga allocates memory chunks each 256KB, you can estimate the size of database you can handle by following formula:
(database size) = vm.max_map_count * (memory chunks)
If you want to handle over 16GB Groonga database, you must specify at least 65536 as the value of
database size (16GB) = vm.max_map_count (65536) * memory chunks (256KB)
You can modify
vm.max_map_count temporary by
sudo sysctl -w vm.max_map_count=65536.
Then save the configuration value to