Mongodb'dan transparent_hugepage / defrag uyarısı nasıl önlenir?


96

THP ile ilgili mongodb'den aşağıdaki uyarıyı alıyorum

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'

Ama THP'yi manuel olarak kapatmayı başardım

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

Ben ekleyerek hile yaptı transparent_hugepage=neveretmek GRUB_CMDLINE_LINUX_DEFAULTiçinde /etc/default/grubve ekleme

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

-e /etc/rc.local

Uyarıdan nasıl kaçabilirim?


2
Aynı sorunu yaşadım, ancak mongod dahil her şeyi yeniden başlatmayı unuttum. Aptalca bir soru olabileceğini biliyorum ama her şeyi yeniden mi başlattınız?
m8a

1
bekle ... mongod hizmetini yeniden başlatmak mı istedin? oh ... koştum sudo service mongod restartve uyarı gitti! Teşekkürler! bu garip, neden sanal makineyi yeniden başlatamıyorum?
Frederick Zhang

1
Neden yeniden başlatmayı yakalayamadığından emin değilim. Ama evet, arka plan programını yeniden başlatmayı kastettim. Çalıştığına sevindim.
m8a

7
Bu bir çözüm değil. Yeniden başlattıktan sonra bu uyarıyı görmenizin nedeni, mongo daemon'un rc.local'iniz çalıştırılmadan önce başlatılmış olmasıdır. Sistem önyüklemesinden sonra daemon'u yeniden başlatmak sorunu çözer, ancak bir dahaki sefere VM'nizi yeniden başlattığınızda bu güzel uyarıyı tekrar göreceksiniz. Maalesef hala aradığım için size çözümü veremem.
SileNT

1
@ Frederick888 VM'yi yeniden başlatsanız bile? Hizmeti yeniden başlatmak, uyarıyı geçici olarak çözer. Daha fazla ayrıntı için bu sorunu kontrol edin: jira.mongodb.org/browse/SERVER-17418
SileNT

Yanıtlar:


161

Resmi MongoDB dokümantasyonu bu sorun için çeşitli çözümler sunar. Ayrıca benim için çalışan bu çözümü deneyebilirsiniz :

Not: MongoDB sürümü 3.0'dan büyükse resmi dokümantasyon direktiflerini deneyin

  1. /etc/init.d/mongodDosyayı açın .
    (kontrol edebileceğiniz böyle bir dosya yoksa /etc/init.d/mongod, /etc/init/mongod.confdosyalar - kredi: aşağıdaki yorumlar)

  2. Aşağıdaki satırları hemen sonrasına chown $DAEMONUSER /var/run/mongodb.pidve öncesine ekleyin end script.

  3. Yeniden başlatın mongod( service mongod restart).

İşte eklenecek satırlar /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

Bu kadar!


Üzgünüm cevabınızı hemen kabul etmedim. Rc.local'a eklediğim satırları yorumladım ve çözümünüzü denedim ve benim için de işe yaradı. Teşekkürler!
Frederick Zhang

6
Pekala, bir /etc/init/mongod.conf dosyası bulamadım, ancak bu satırları /etc/init.d/mongod komut dosyasına, echo "Başlangıç ​​..." satırından hemen önce ekledim ve benim için çalışıyor
Sagi Mann

2
harika çözüm! Ubuntu 14.04 ve mongod 3 üzerinde çalışıyor.
geçersiz

1
Bu çalışır, lütfen Ubuntu kullanıcıları için /etc/init/mongod.conf için alternatif giriş ekleyin. gracias.
Jason Sebring

Conf dosyamın YAML formatında olduğu ubuntu üzerinde mongodb kullanıyorum. Orada da uygulanabilecek alternatif bir çözüm var mı?
Pravesh Jain


10

Upstart kullanan Ubuntu 14.04 için:

Makineleri Ansible ile konuşlandırdığımız için rc dosyalarında veya GRUB yapılandırmalarında değişiklik yapmayı sevmiyorum.

sysfsutils/ Kullanmayı denedim, sysfs.confancak hizmetleri hızlı (veya yavaş makinelerde) başlatırken zamanlama sorunlarıyla karşılaştım. Bazen mongod sysfsutils'ten önce başlatılmış gibi görünüyordu. Bazen işe yaradı, bazen yaramadı.

Mongod bir başlangıç ​​süreci olduğundan, en temiz çözümün /etc/init/mongod_vm_settings.confaşağıdaki içeriğe sahip dosyayı eklemek olduğunu buldum :

# 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

Bu, mongod başlatılmadan hemen önce komut dosyasını çalıştıracaktır. Mongod'u ( sudo service mongod restart) yeniden başlatın ve bitti.


8
  1. Aç / etc / default / grub

    sudo vi / etc / varsayılan / grub

  2. Güncelleme
    GRUB_CMDLINE_LINUX_DEFAULT = "" GRUB_CMDLINE_LINUX_DEFAULT için = "transparent_hugepage = asla"

  3. Dosyayı kaydet
    : wq (vi'de)
  4. Update-grub'u çalıştır

    sudo güncelleme grubu

  5. Makineyi yeniden başlatın

Güncelleme: Bir sanal barındırma sağlayıcısı kullanıyorsanız, bu çalışacaktır IFF grub önyüklemesi desteklenir. DigitalOcean grub önyüklemesini DESTEKLEMEZ.


1
Benim için çalışmıyor ... (Evet, grub önyüklemeli kendi Linux makinem var) ... :(
Pierpaolo Cira

1
Burada bahsedilen çözümlerden bazılarını "ayarlanmış" olarak da çalışan bir sistemde kullanıyorsanız, ayarlanmış olanın bu çözümleri geçersiz kılabileceğini unutmayın. Daha fazla bilgi için buraya bakın: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

Etkinleştirilene bakılmaksızın birleştirmenin incelendiği doğrulandı:

$ 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)

Bu nedenle, bu hatanın düzeltmesi ilk önce transparent_hugepage / enabled'e bakmak ve eğer hiç değilse, alakasız transparent_hugepage / defrag ayarına bakmaktan çekinmeyin.

Kaynak .


Oracle Linux 7 üzerinde çalışırken, önerilen değişikliklerden sonra defrag hiçbir zaman kaybolmadı .. nihayet rahat bir nefes !! bu yanıtın daha fazla oylamaya ihtiyacı var !! Bunu kazmak için 4 saat harcadım.
Gnana

4

Systemd kullanan Ubuntu 16.04:

systemctl edit mongod

Aşağıdakileri yapıştırın:

[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"

1
Centos 7 için /usr/lib/systemd/system/mongod.service de çalıştı
shortsteps
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.