จะหลีกเลี่ยงคำเตือน transparent_hugepage / defrag จาก mongodb ได้อย่างไร?


96

ฉันได้รับคำเตือนต่อไปนี้จาก mongodb เกี่ยวกับ 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'

แต่ฉันจัดการปิด THP ด้วยตนเอง

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

ฉันไม่หลอกลวงโดยการเพิ่มtransparent_hugepage=neverการGRUB_CMDLINE_LINUX_DEFAULTใน/etc/default/grubและการเพิ่ม

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

ถึง /etc/rc.local

ฉันจะหลีกเลี่ยงคำเตือนบนโลกนี้ได้อย่างไร?


2
ฉันมีปัญหาเดียวกัน แต่ลืมที่จะรีบูตทุกอย่างรวมถึง mongod ฉันรู้ว่ามันอาจจะเป็นคำถามโง่ ๆ แต่คุณรีบูตทุกอย่างแล้วหรือยัง?
m8a

1
เดี๋ยวก่อน ... คุณหมายถึงรีสตาร์ทบริการ mongod ใช่ไหม โอ้ ... ฉันวิ่งsudo service mongod restartแล้วคำเตือนก็หายไป! ขอบคุณ! นี่แปลกทำไมฉันรีบูต VM ไม่ได้
Frederick Zhang

1
ไม่แน่ใจว่าทำไมถึงรีบูตไม่ได้ แต่ใช่ฉันหมายถึงการรีสตาร์ทภูต ดีใจที่มันใช้งานได้
m8a

7
นี่ไม่ใช่วิธีแก้ปัญหา เหตุผลที่คุณเห็นคำเตือนนี้หลังจากรีบูตคือ mongo daemon เริ่มทำงานก่อนที่ rc.local ของคุณจะถูกเรียกใช้งาน การรีสตาร์ท daemon หลังจากบู๊ตระบบช่วยแก้ปัญหาได้ แต่ในครั้งต่อไปเมื่อคุณรีบูต VM คุณจะเห็นคำเตือนที่ดีอีกครั้ง โชคไม่ดีที่ฉันไม่สามารถให้ทางออกกับคุณได้เพราะฉันยังคงค้นหามันอยู่
SileNT

1
@ Frederick888 แม้ว่าคุณจะรีบูต VM? การเริ่มบริการใหม่จะช่วยแก้คำเตือนเพียงชั่วคราว ดูรายละเอียดเพิ่มเติมได้ที่jira.mongodb.org/browse/SERVER-17418
SileNT

คำตอบ:


161

เอกสาร MongoDB อย่างเป็นทางการให้วิธีแก้ปัญหาต่างๆสำหรับปัญหานี้ คุณยังสามารถลองใช้วิธีนี้ซึ่งเหมาะกับฉัน:

หมายเหตุ: ลองใช้คำสั่งเอกสารอย่างเป็นทางการหากเวอร์ชัน MongoDB มากกว่า 3.0

  1. เปิด/etc/init.d/mongodไฟล์
    (ถ้าไม่มีไฟล์ดังกล่าวคุณอาจตรวจสอบ/etc/init.d/mongod, /etc/init/mongod.confไฟล์ - เครดิต: ความคิดเห็นด้านล่าง)

  2. เพิ่มบรรทัดด้านล่างทันทีหลังจากที่ก่อนchown $DAEMONUSER /var/run/mongodb.pidend script

  3. รีสตาร์ทmongod( service mongod restart)

นี่คือบรรทัดที่จะเพิ่มไป/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

แค่นั้นแหละ!


ขออภัยที่ฉันไม่ยอมรับคำตอบของคุณในทันที ฉันแสดงความคิดเห็นเกี่ยวกับบรรทัดที่ฉันเพิ่มใน rc.local และลองใช้วิธีแก้ปัญหาของคุณและมันก็ใช้ได้ผลสำหรับฉันเช่นกัน ขอบคุณ!
Frederick Zhang

6
Welll ฉันไม่พบไฟล์ /etc/init/mongod.conf แต่ฉันได้เพิ่มบรรทัดเหล่านั้นลงในไฟล์สคริปต์ /etc/init.d/mongod ก่อนบรรทัด "กำลังเริ่ม ... " ของ echo และมัน ทำงานให้ฉัน
Sagi Mann

2
ทางออกที่ยอดเยี่ยม! ทำงานบน Ubuntu 14.04 และ mongod 3
โมฆะ

1
ใช้งานได้โปรดเพิ่มรายการสำรองสำหรับ /etc/init/mongod.conf สำหรับผู้ใช้ Ubuntu กราเซียส
Jason Sebring

ฉันใช้ mongodb บน Ubuntu โดยที่ไฟล์ conf ของฉันอยู่ในรูปแบบ YAML มีวิธีแก้ปัญหาอื่นที่ใช้ได้เช่นกันหรือไม่?
Pravesh Jain


10

สำหรับ Ubuntu 14.04 โดยใช้ upstart:

เนื่องจากเรากำลังปรับใช้เครื่องกับ Ansible ฉันจึงไม่ชอบแก้ไขไฟล์ rc หรือการกำหนดค่า GRUB

ฉันลองใช้sysfsutils/ sysfs.confแต่พบปัญหาเรื่องเวลาเมื่อเริ่มบริการบนเครื่องที่เร็ว (หรือเครื่องช้า) ดูเหมือนว่าบางครั้ง mongod จะเริ่มต้นก่อน sysfsutils บางครั้งก็ใช้งานได้บางครั้งก็ไม่ได้ผล

เนื่องจาก mongod เป็นกระบวนการที่เริ่มต้นขึ้นฉันจึงพบว่าวิธีแก้ปัญหาที่สะอาดที่สุดคือการเพิ่มไฟล์ที่/etc/init/mongod_vm_settings.confมีเนื้อหาต่อไปนี้:

# 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

สิ่งนี้จะเรียกใช้สคริปต์ก่อนที่ mongod จะเริ่มทำงาน รีสตาร์ท mongod ( sudo service mongod restart) และเสร็จสิ้น


8
  1. เปิด / etc / default / grub

    sudo vi / etc / default / ด้วง

  2. อัปเดต
    GRUB_CMDLINE_LINUX_DEFAULT = "" เป็น GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"

  3. บันทึกไฟล์
    : wq (ใน vi)
  4. เรียกใช้ update-grub

    sudo ปรับปรุงด้วง

  5. รีบูตเครื่อง

อัปเดต: หากคุณใช้ผู้ให้บริการโฮสติ้งเสมือนสิ่งนี้จะใช้งานได้รองรับการบูต IFF grub DigitalOcean ไม่รองรับการบูตด้วง


1
มันใช้ไม่ได้สำหรับฉัน ... (ใช่ฉันมีเครื่อง Linux ของตัวเองพร้อมด้วงบูต) ... :(
Pierpaolo Cira

1
โปรดทราบว่าหากคุณกำลังใช้โซลูชันบางอย่างที่กล่าวถึงที่นี่บนระบบที่เรียกใช้ 'ปรับแต่ง' ด้วยเช่นกันการปรับจูนอาจแทนที่โซลูชันเหล่านั้น ดูข้อมูลเพิ่มเติมได้ที่นี่: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

ตรวจสอบว่าการจัดเรียงข้อมูลถูกตรวจสอบโดยไม่คำนึงถึงการเปิดใช้งาน:

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

ดังนั้นการแก้ไขข้อบกพร่องนี้คือการดูที่ transparent_hugepage / เปิดใช้งานก่อนและหากไม่เคยเป็นเช่นนั้นอย่ากังวลไปที่การตั้งค่า transparent_hugepage / defrag ที่ไม่เกี่ยวข้อง

แหล่ง


การทำงานบน Oracle Linux 7 การ Defrag ไม่เคยหายไปหลังจากการเปลี่ยนแปลงที่แนะนำ .. ในที่สุดก็ถอนหายใจโล่งอก !! คำตอบนี้ต้องการการโหวตมากขึ้น !! ฉันใช้เวลา 4 ชั่วโมงในการขุดสิ่งนี้
Gnana

4

Ubuntu 16.04 โดยใช้ systemd:

systemctl edit mongod

วางสิ่งต่อไปนี้:

[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 ใน
/usr/lib/systemd/system/mongod.service
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.