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=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
도대체 어떻게 경고를 피할 수 있습니까?
답변
공식 MongoDB 문서 는이 문제에 대한 몇 가지 솔루션을 제공합니다. 나를 위해 일한 이 솔루션을 시도해 볼 수도 있습니다 .
참고 : MongoDB 버전이 3.0 이상인 경우 공식 문서 지침을 시도하십시오.
-
/etc/init.d/mongod
파일을 엽니 다 .
(이러한 파일은 확인되지 수 있다면/etc/init.d/mongod
,/etc/init/mongod.conf
파일 – 신용 : 주석 아래) -
바로 뒤
chown $DAEMONUSER /var/run/mongodb.pid
와 바로 앞에 아래 줄을 추가합니다end script
. - 다시 시작
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
)를 다시 시작 하고 완료합니다.
답변
-
/ etc / default / grub을 엽니 다.
sudo vi / etc / default / grub
-
업데이트
GRUB_CMDLINE_LINUX_DEFAULT = “”GRUB_CMDLINE_LINUX_DEFAULT에 = “transparent_hugepage = 결코” - 저장 파일
: wq (in vi) -
update-grub 실행
sudo update-grub
-
머신 재부팅
업데이트 : 가상 호스팅 공급자를 사용하는 경우 작동합니다. 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"