mongodb에서 transparent_hugepage / defrag 경고를 피하는 방법은 무엇입니까?


96

THP에 대해 mongodb로부터 다음 경고를 받고 있습니다.

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=neverGRUB_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를 포함하여 모든 것을 재부팅하는 것을 잊었습니다. 어리석은 질문 일 수도 있지만 모든 것을 재부팅 했습니까?
Skooppa.com 2015 년

1
잠깐 ... mongod 서비스를 다시 시작하려고 했습니까? 오 ... 달렸고 sudo service mongod restart경고가 사라졌습니다! 감사! 이상합니다. VM을 재부팅 할 수없는 이유는 무엇입니까?
Frederick Zhang

1
재부팅시 왜 잡히지 않았는지 모르겠습니다. 하지만 네, 데몬을 다시 시작해야했습니다. 잘 작동하고 있습니다.
Skooppa.com

7
이것은 해결책이 아닙니다. 재부팅 후이 경고가 표시되는 이유는 rc.local이 실행되기 전에 mongo 데몬이 시작되기 때문입니다. 시스템 부팅 후 데몬을 다시 시작하면 문제가 해결되지만 다음에 VM을 재부팅하면 멋진 경고가 다시 표시됩니다. 불행히도 나는 아직도 그것을 찾고 있기 때문에 당신에게 해결책을 줄 수 없습니다.
SileNT 2015 년

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.pid와 바로 앞에 아래 줄을 추가합니다 end 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
글쎄요, 저는 /etc/init/mongod.conf 파일을 찾지 못했지만, 그 줄을 /etc/init.d/mongod 스크립트 파일에 추가했습니다. echo "Starting ..."줄 바로 앞에 있습니다. 나를 위해 작동
SAGI 맨

2
멋진 솔루션! Ubuntu 14.04 및 mongod 3에서 작동합니다.
void

1
이것은 우분투 사용자를 위해 /etc/init/mongod.conf에 대한 대체 항목을 추가하십시오. 그라시아 스.
Jason Sebring

내 conf 파일이 YAML 형식 인 우분투에서 mongodb를 사용하고 있습니다. 거기에도 적용 가능한 대체 솔루션이 있습니까?
Pravesh Jain


10

upstart를 사용하는 Ubuntu 14.04의 경우 :

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 / grub

  2. 업데이트
    GRUB_CMDLINE_LINUX_DEFAULT = ""GRUB_CMDLINE_LINUX_DEFAULT에 = "transparent_hugepage = 결코"

  3. 저장 파일
    : wq (in vi)
  4. update-grub 실행

    sudo update-grub

  5. 머신 재부팅

업데이트 : 가상 호스팅 공급자를 사용하는 경우 작동합니다. IFF GRUB 부팅이 지원됩니다. DigitalOcean은 GRUB 부팅을 지원하지 않습니다.


1
그것은 나를 위해 작동하지 않습니다 ... (예, 나는 grub 부팅이있는 내 자신의 Linux 시스템을 가지고 있습니다) ... :(
Pierpaolo Cira

1
여기에 언급 된 솔루션 중 일부를 사용하는 경우 'tuned'를 실행하는 시스템에서도 tuned가 해당 솔루션을 재정의 할 수 있습니다. 추가 정보를 원하시면 여기를 참조하십시오 : bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay 클레이튼

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 / enabled를 살펴 보는 것이며, 그렇지 않은 경우 관련이없는 transparent_hugepage / defrag 설정을 살펴 보지 마십시오.

소스 .


Oracle Linux 7에서 작업 할 때 권장 사항 변경 후에도 조각 모음이 사라지지 않았습니다. 드디어 큰 안도의 한숨 !! 이 답변은 더 많은 찬성표가 필요합니다 !! 나는 이것을 파는 데 4 시간을 보냈다.
Gnana

4

systemd를 사용하는 Ubuntu 16.04 :

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
/usr/lib/systemd/system/mongod.service의 Centos 7에서도 일했습니다
shortsteps
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.