Bagaimana cara menghindari peringatan transparent_hugepage / defrag dari mongodb?

96

Saya menerima peringatan berikut dari mongodb tentang 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'

Tapi saya berhasil mematikan THP secara manual

frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Saya melakukan trik dengan menambahkan transparent_hugepage=neverke GRUB_CMDLINE_LINUX_DEFAULTdalam /etc/default/grubdan menambahkan

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

untuk /etc/rc.local

Bagaimana saya bisa menghindari peringatan itu?

Frederick Zhang
sumber
2
Saya mengalami masalah yang sama, tetapi lupa untuk me-reboot semuanya, termasuk mongod. Saya tahu itu mungkin pertanyaan bodoh, tetapi apakah Anda merestart semuanya?
Skooppa.com
1
tunggu ... maksud Anda restart layanan mongod? oh ... aku lari sudo service mongod restartdan peringatannya hilang begitu saja! Terima kasih! ini aneh, mengapa saya tidak bisa reboot VM saja?
Frederick Zhang
1
Tidak yakin mengapa itu tidak menangkap saat reboot. Tapi ya, maksud saya memulai ulang daemon. Senang berhasil.
Skooppa.com
7
Ini bukanlah solusi. Alasan Anda melihat peringatan ini setelah reboot adalah karena mongo daemon dijalankan sebelum rc.local Anda dijalankan. Memulai ulang daemon setelah boot sistem menyelesaikan masalah, tetapi lain kali ketika Anda mem-boot ulang VM, Anda akan melihat peringatan yang bagus itu lagi. Sayangnya saya tidak dapat memberikan solusi karena saya masih mencarinya.
SileNT
1
@ Frederick888 Bahkan jika Anda me-reboot VM? Memulai ulang layanan memecahkan peringatan hanya sementara. Untuk detail selengkapnya, periksa masalah ini: jira.mongodb.org/browse/SERVER-17418
SileNT

Jawaban:

161

Dokumentasi resmi MongoDB memberikan beberapa solusi untuk masalah ini. Anda juga dapat mencoba solusi ini , yang berhasil untuk saya:

Catatan: Coba arahan dokumentasi resmi jika versi MongoDB lebih besar dari 3.0

  1. Buka /etc/init.d/mongodfile.
    (jika tidak ada file seperti itu yang dapat Anda periksa /etc/init.d/mongod, /etc/init/mongod.conffile - kredit: komentar di bawah)

  2. Tambahkan garis di bawah segera setelah chown $DAEMONUSER /var/run/mongodb.piddan sebelum end script.

  3. Mulai ulang mongod( service mongod restart).

Berikut adalah baris untuk ditambahkan /etc/init.d/mongod:

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

Itu dia!

efkan
sumber
Maaf saya tidak segera menerima jawaban Anda. Saya mengomentari baris yang saya tambahkan ke rc.local out dan mencoba solusi Anda, dan itu berhasil untuk saya juga. Terima kasih!
Frederick Zhang
6
welll, saya tidak menemukan file /etc/init/mongod.conf, tapi saya menambahkan baris tersebut ke file script /etc/init.d/mongod, tepat sebelum baris echo "Starting ...", dan itu bekerja untuk saya
Sagi Mann
2
solusi yang luar biasa! berfungsi di Ubuntu 14.04 dan mongod 3.
batal
1
Ini berfungsi, silakan tambahkan entri alternatif untuk /etc/init/mongod.conf untuk pengguna Ubuntu. gracias.
Jason Sebring
Saya menggunakan mongodb di ubuntu di mana file conf saya dalam format YAML. Apakah ada solusi alternatif yang bisa diterapkan di sana juga?
Pravesh Jain
10

Untuk Ubuntu 14.04 menggunakan pemula:

Karena kami menerapkan mesin dengan Ansible, saya tidak suka memodifikasi file rc atau konfigurasi GRUB.

Saya mencoba menggunakan sysfsutils/ sysfs.conftetapi mengalami masalah waktu saat memulai layanan dengan cepat (atau mesin lambat). Sepertinya terkadang mongod dimulai sebelum sysfsutils. Terkadang berhasil, terkadang tidak.

Karena mongod adalah proses pemula, saya menemukan bahwa solusi terbersih adalah menambahkan file /etc/init/mongod_vm_settings.confdengan konten berikut:

# Ubuntu upstart file at /etc/init/mongod_vm_settings.conf
#
#   This file will set the correct kernel VM settings for MongoDB
#   This file is maintained in Ansible

start on (starting mongod)
script
  echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
  echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
end script

Ini akan menjalankan skrip sebelum mongod dimulai. Mulai ulang mongod ( sudo service mongod restart) dan selesai.

Whyhankee
sumber
8
  1. Buka / etc / default / grub

    sudo vi / etc / default / grub

  2. Perbarui
    GRUB_CMDLINE_LINUX_DEFAULT = "" menjadi GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = tidak pernah"

  3. Simpan file
    : wq (dalam vi)
  4. Jalankan update-grub

    sudo update-grub

  5. Nyalakan ulang mesin

Pembaruan: Jika Anda menggunakan penyedia hosting virtual, ini akan berfungsi jika boot grub IFF didukung. DigitalOcean TIDAK mendukung boot grub.

clrho
sumber
1
Tidak berhasil untuk saya ... (Ya, saya memiliki mesin Linux saya sendiri, dengan boot grub) ... :(
Pierpaolo Cira
1
Perhatikan bahwa jika Anda menggunakan beberapa solusi yang disebutkan di sini, pada sistem yang juga menjalankan 'disetel', disetel dapat menimpa solusi tersebut. Lihat di sini untuk info lebih lanjut: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton
5

Diverifikasi bahwa defrag diperiksa tanpa memperhatikan yang diaktifkan:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
$ service mongod start
... (in log) WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'
$ echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
$ service mongod stop
$ service mongod start
... (no warning in log)

Oleh karena itu, perbaikan bug ini adalah pertama-tama melihat transparent_hugepage / enabled, dan jika tidak pernah, jangan repot-repot melihat pengaturan transparent_hugepage / defrag yang tidak relevan.

Sumber .

Michael Horojanski
sumber
Bekerja pada Oracle Linux 7, defrag tidak pernah hilang setelah perubahan yang disarankan .. akhirnya sangat lega !! jawaban ini membutuhkan lebih banyak suara positif !! Saya menghabiskan 4 jam untuk menggali ini.
Gnana
4

Ubuntu 16.04 menggunakan systemd:

systemctl edit mongod

Tempel yang berikut ini:

[Service]
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
jepret
sumber
1
bekerja untuk Centos 7 di /usr/lib/systemd/system/mongod.service juga
shortsteps