Làm cách nào để tránh cảnh báo transparent_hugepage / defrag từ mongodb?


96

Tôi nhận được cảnh báo sau từ mongodb về 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'

Nhưng tôi đã quản lý để tắt THP theo cách thủ công

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

Tôi đã làm các trick bằng cách thêm transparent_hugepage=nevervào GRUB_CMDLINE_LINUX_DEFAULTtrong /etc/default/grubvà bổ sung

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

đến /etc/rc.local

Làm thế quái nào tôi có thể tránh được cảnh báo?


2
Tôi đã gặp vấn đề tương tự, nhưng quên khởi động lại mọi thứ, bao gồm cả mongod. Tôi biết đó có thể là một câu hỏi ngu ngốc, nhưng bạn đã khởi động lại mọi thứ chưa?
Skooppa.com

1
đợi đã ... ý bạn là khởi động lại dịch vụ mongod? oh ... Tôi đã chạy sudo service mongod restartvà cảnh báo vừa biến mất! cảm ơn! điều này thật lạ, tại sao tôi không thể khởi động lại máy ảo?
Frederick Zhang

1
Không chắc tại sao nó không bắt được khi khởi động lại. Nhưng đúng, ý tôi là khởi động lại daemon. Rất vui vì nó đang hoạt động.
Skooppa.com

7
Đây không phải là một giải pháp. Lý do bạn thấy cảnh báo này sau khi khởi động lại là daemon mongo được khởi động trước khi rc.local của bạn được thực thi. Khởi động lại daemon sau khi khởi động hệ thống sẽ giải quyết được vấn đề, nhưng lần sau khi khởi động lại máy ảo, bạn sẽ thấy cảnh báo thú vị đó một lần nữa. Rất tiếc, tôi không thể cung cấp cho bạn giải pháp vì tôi vẫn đang tìm kiếm nó.
SileNT

1
@ Frederick888 Ngay cả khi bạn khởi động lại máy ảo? Khởi động lại dịch vụ chỉ giải quyết cảnh báo tạm thời. Để biết thêm chi tiết, hãy kiểm tra sự cố này: jira.mongodb.org/browse/SERVER-17418
SileNT

Câu trả lời:


161

Tài liệu chính thức của MongoDB đưa ra một số giải pháp cho vấn đề này. Bạn cũng có thể thử giải pháp này , giải pháp này phù hợp với tôi:

Lưu ý: Hãy thử các hướng dẫn tài liệu chính thức nếu phiên bản MongoDB lớn hơn 3.0

  1. Mở /etc/init.d/mongodtệp.
    (nếu không có tệp nào như vậy, bạn có thể kiểm tra /etc/init.d/mongod, /etc/init/mongod.conftệp - tín dụng: các nhận xét bên dưới)

  2. Thêm các dòng bên dưới ngay sau chown $DAEMONUSER /var/run/mongodb.pidvà trước đó end script.

  3. Khởi động lại mongod( service mongod restart).

Đây là những dòng để thêm vào /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

Đó là nó!


Xin lỗi vì tôi không chấp nhận câu trả lời của bạn ngay lập tức. Tôi nhận xét những dòng tôi đã thêm vào rc.local và thử giải pháp của bạn, và nó cũng hiệu quả với tôi. Cảm ơn!
Frederick Zhang

6
Rất tiếc, tôi không tìm thấy tệp /etc/init/mongod.conf, nhưng tôi đã thêm các dòng đó vào tệp tập lệnh /etc/init.d/mongod, ngay trước dòng echo "Đang bắt đầu ..." và nó làm việc cho tôi
Sagi Mann

2
giải pháp tuyệt vời! hoạt động trên Ubuntu 14.04 và mongod 3.
void

1
Điều này hoạt động, vui lòng thêm mục thay thế cho /etc/init/mongod.conf cho người dùng Ubuntu. gracias.
Jason Sebring,

Tôi đang sử dụng mongodb trên ubuntu trong đó tệp conf của tôi ở định dạng YAML. Có một giải pháp thay thế áp dụng ở đó không?
Pravesh Jain


10

Đối với Ubuntu 14.04 sử dụng phiên bản mới:

Vì chúng tôi đang triển khai các máy với Ansible nên tôi không thích sửa đổi tệp rc hoặc cấu hình GRUB.

Tôi đã thử sử dụng sysfsutils/ sysfs.confnhưng gặp phải vấn đề về thời gian khi khởi động dịch vụ trên các máy nhanh (hoặc chậm). Có vẻ như đôi khi mongod được khởi động trước sysfsutils. Đôi khi nó hoạt động, đôi khi nó không.

Vì mongod là một quy trình mới khởi động nên tôi thấy rằng giải pháp tốt nhất là thêm tệp /etc/init/mongod_vm_settings.confvới nội dung sau:

# 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

Thao tác này sẽ chạy tập lệnh ngay trước khi mongod được bắt đầu. Khởi động lại mongod ( sudo service mongod restart) và hoàn tất.


8
  1. Mở / etc / default / grub

    sudo vi / etc / default / grub

  2. Cập nhật
    GRUB_CMDLINE_LINUX_DEFAULT = "" thành GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"

  3. Lưu tệp
    : wq (in vi)
  4. Chạy update-grub

    sudo update-grub

  5. Khởi động lại máy

Cập nhật: Nếu bạn đang sử dụng nhà cung cấp dịch vụ lưu trữ ảo, điều này sẽ hoạt động IFF grub khởi động được hỗ trợ. DigitalOcean KHÔNG hỗ trợ khởi động grub.


1
Nó không làm việc cho tôi ... (Vâng, tôi có máy Linux của riêng tôi, với boot grub) ... :(
Pierpaolo Cira

1
Lưu ý rằng nếu bạn đang sử dụng một số giải pháp được đề cập ở đây, trên hệ thống cũng chạy 'điều chỉnh', điều chỉnh có thể ghi đè các giải pháp đó. Xem tại đây để biết thêm thông tin: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

Đã xác minh rằng chống phân mảnh được kiểm tra mà không liên quan đến việc đã bật:

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

Do đó, cách khắc phục lỗi này là trước tiên hãy nhìn vào transparent_hugepage / đã được kích hoạt, và nếu nó không bao giờ xảy ra, đừng bận tâm đến cài đặt transparent_hugepage / defrag không liên quan.

Nguồn .


Làm việc trên Oracle Linux 7, tình trạng chống phân mảnh không bao giờ biến mất sau những thay đổi được khuyến nghị .. cuối cùng cũng thở phào nhẹ nhõm !! câu trả lời này cần nhiều lượt ủng hộ hơn !! Tôi đã dành 4 giờ để đào cái này.
Gnana

4

Ubuntu 16.04 sử dụng systemd:

systemctl edit mongod

Dán những thứ sau:

[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
cũng đã làm việc cho Centos 7 trong /usr/lib/systemd/system/mongod.service
bước ngắn vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.