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

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

도대체 어떻게 경고를 피할 수 있습니까?



답변

공식 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

그게 다야!


답변

MongoDB는 지금 init.d 스크립트 를 사용하도록 권장 사항을 업데이트했습니다 .
http://docs.mongodb.org/master/tutorial/transparent-huge-pages/


답변

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)를 다시 시작 하고 완료합니다.


답변

  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 부팅을 지원하지 않습니다.


답변

조각 모음이 활성화 여부에 관계없이 검사되었는지 확인했습니다.

$ 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 설정을 살펴 보지 마십시오.

소스 .


답변

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"


답변