mongodb 3.0을 사용하고 경고를 찾습니다.
MongoDB shell version: 3.0.0
connecting to: test
Server has startup warnings:
2015-03-13T16:28:29.405+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten]
~# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
~# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
echo를 사용하려고 시도하지만 영구적이지 않으며 재부팅 후 재설정됩니다.
echo never > /sys/kernel/mm/transparent_hugepage/defrag
/sys/kernel/mm/transparent_hugepage/enabled
영구적으로 수정하려면 어떻게합니까 ?
답변
당신은 할 수 있습니다
-
sysfsutils
패키지를 설치하십시오 :sudo apt install sysfsutils
-
그 설정을 가진 라인을 추가
/etc/sysfs.conf
:kernel/mm/transparent_hugepage/enabled = never
이 방법은 사용자 지정 시작 스크립트에 의존하지 않고 모든 sysfs 구성을 한 곳에 보관하기 때문에 가장 깨끗한 솔루션입니다. 스크립트와 조건식을 사용하는 다른 답변은 커널이 어떤 경로를 통해 해당 설정을 노출하는지 알 수없는 경우, 즉 영향을받는 시스템에서 실행중인 커널 버전에 대한 대략적인 아이디어가없는 경우에 적합합니다.
답변
MongoDB 문서에는 몇 가지 제안이 있습니다. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
“선호하는”방법은 GRUB 구성을 다시 빌드 하기 위해 편집 /etc/default/grub
및 추가 한 후 실행 하는 것입니다.transparent_hugepage=never
GRUB_CMDLINE_LINUX_DEFAULT
update-grub
다음 두 줄짜리가 그렇게 할 것입니다. 출력을 확인하십시오!
sed -r 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-zA-Z0-9_= ]*/& transparent_hugepage=never/' /etc/default/grub | sudo tee /etc/default/grub
sudo update-grub
그 주 update-grub
에 대한 래퍼입니다 grub-mkconfig
. grub-mkconfig
의 항목을 읽어 오기 /etc/default/grub
에서 사람들과 /etc/default/grub.d/*
. 우연히 AWS에서 실행중인 경우 대신 편집해야합니다 /etc/default/grub.d/50-cloudimg-settings.cfg
.
“대체”방법은 /etc/rc.local
다음 을 편집 하고 추가하는 것입니다 exit 0
.
if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then
echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
개인적으로, 나는 “바람직한”방법과 “대체적인”방법을 상호 배타적이지 않고 조각 모음에 대한 경고를 없애기 때문에 결국 끝났다.
* Ubuntu 14.04, MongoDB 3.0.2 및 AWS에서 저를 위해 일했습니다.
답변
다음은 AWS EC2의 Ubuntu 16.04에서 작동하도록 테스트 된 솔루션입니다. Ubuntu 16.04는 systemd init 시스템을 사용하며이 구성 파일은 MongoDB를 부팅하기 전에 이러한 설정을 변경해야 함을 나타냅니다.
이름이 지정된 파일을 작성 /etc/systemd/system/mongodb-hugepage-fix.service
하고 다음 컨텐츠를 추가하십시오.
[Unit]
Description="Disable Transparent Hugepage before MongoDB boots"
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
Before=mongodb.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
[Install]
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
RequiredBy=mongodb.service
파일을 systemd로로드하려면 :
systemctl daemon-reload
MongoDB의 부팅 시간 종속성으로 파일을 활성화하려면
systemctl enable mongodb-hugepage-fix
다음 부팅 전에 변경 사항을 즉시 활성화하려는 경우
systemctl start mongodb-hugepage-fix
systemctl restart mongod
이 솔루션은 시스템 대신 Upstart init 솔루션을 사용하는 Ubuntu 14.04 에는 적합 하지 않습니다 .
답변
아래 행을 /etc/rc.local에 추가하십시오.
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
서버를 재부팅 할 때 실행됩니다.
답변
GRUB은 업그레이드 후 변경되며 rc.local은 mongo가 시작된 후에 만 실행되므로 rc.local 끝에 서비스 mongo restart를 추가해야합니다.
테스트 인 경우 -f / sys / kernel / mm / transparent_hugepage / enabled; 그때 echo never> / sys / kernel / mm / transparent_hugepage / enabled fi 테스트 경우 -f / sys / kernel / mm / transparent_hugepage / defrag; 그때 echo never> / sys / kernel / mm / transparent_hugepage / defrag fi 대기 1 && servie mongod 재시작
또는 누군가 우분투 14.04의 초기화 스크립트에 위의 줄을 성공적으로 추가 했습니까?
답변
Ansible을 사용하여 머신을 배포하기 때문에 rc 파일을 수정하는 것을 좋아하지 않습니다.
sysfsutils
/ 사용을 시도했지만 sysfs.conf
빠른 (또는 느린 컴퓨터) 서비스를 시작할 때 타이밍 문제가 발생했습니다. sysfsutils 이전에 mongod가 시작된 것처럼 보였습니다. 때로는 효과가 있었고 때로는 효과가 없었습니다.
mongod는 시작 프로세스이므로 가장 깨끗한 솔루션은 /etc/mongo_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/sysfs.conf
y voilá 에이 두 줄을 추가했습니다.
kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never
이 변경 사항을 적용한 후 머신을 재부팅하십시오.