I'm receiving the following warning from mongodb about THP
2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
But I did manage to turned THP off manually
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
I did the trick by adding transparent_hugepage=never
to GRUB_CMDLINE_LINUX_DEFAULT
in /etc/default/grub
and adding
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
to /etc/rc.local
How on earth can I avoid the warning?
Verified that the defrag is examined without regard to the enabled:
Therefore, the fix to this bug is to first look at transparent_hugepage/enabled, and if it is never, don't bother looking at the irrelevant transparent_hugepage/defrag setting.
Source.
Official MongoDB documentation gives several solutions for this issue. You can also try this solution, which worked for me:
Note: Try official documentation directives if MongoDB version is greater than 3.0
Open
/etc/init.d/mongod
file.(if no such file you might check
/etc/init.d/mongod
,/etc/init/mongod.conf
files - credit: the below comments)Add the lines below immediately after
chown $DAEMONUSER /var/run/mongodb.pid
and beforeend script
.mongod
(service mongod restart
).Here are the lines to add to
/etc/init.d/mongod
:That's it!
For Ubuntu 14.04 using upstart:
Since we are deploying machines with Ansible I don't like modifying rc files or GRUB configs.
I tried using
sysfsutils
/sysfs.conf
but ran into timing issues when starting the services on fast (or slow machines). It looked like sometimes mongod was started before sysfsutils. Sometimes it worked, sometimes it did not.Since mongod is an upstart process I found that the cleanest solution was to add the file
/etc/init/mongod_vm_settings.conf
with the following content:This will run the script just before mongod will be started. Restart mongod (
sudo service mongod restart
) and done.MongoDB have updated their recommendation to use an init.d script now: http://docs.mongodb.org/master/tutorial/transparent-huge-pages/
Open /etc/default/grub
sudo vi /etc/default/grub
Update
GRUB_CMDLINE_LINUX_DEFAULT="" to GRUB_CMDLINE_LINUX_DEFAULT="transparent_hugepage=never"
:wq (in vi)
Run update-grub
sudo update-grub
Reboot machine
Update: If you are using a virtual hosting provider, this will work IFF grub boot is supported. DigitalOcean DOES NOT support grub boot.
Ubuntu 16.04 using systemd:
systemctl edit mongod
Paste the following: