SAP HANA를 설치 중입니다.공격기계. 설치 단계의 일부로 다음과 같이 언급됩니다.
To disable the usage of transparent hugepages set the kernel settings
at runtime with echo never > /sys/kernel/mm/transparent_hugepage/enabled
그렇다면 런타임이 아닌 영구적으로 변경하려면 /proc/vmstat
파일에 위 줄을 추가해야 합니까?
답변1
이러한 옵션을 영구적으로 만들려면 일반적으로 해당 옵션을 파일에 추가합니다 /etc/sysctl.conf
. 이 명령을 사용하면 사용 가능한 옵션의 전체 목록을 볼 수 있습니다.
$ sysctl -a
예
$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000
hugepage
다음과 같이 출력에서 찾을 수 있습니다.
$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0
거기 없나요?
그러나 출력을 보면 아무것도 표시되지 않습니다 transparent_hugepage
. 추가 인터넷 검색 후에 이 주제를 논의하는 Oracle 페이지를 찾았습니다. 페이지 제목은 다음과 같습니다.Linux(x86-64)에서 Oracle용 대용량 페이지 구성.
특히 해당 페이지에서 그들은 방법을 언급합니다.큰 페이지 기능 비활성화.
발췌
투명 거대 페이지를 비활성화하는 가장 좋은 방법은 "/etc/grub.conf" 파일의 커널 부팅 라인에 "transparent_hugepage=never"를 추가하는 것입니다.
title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64) root (hd0,0) kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off transparent_hugepage=never initrd /initramfs-2.6.39-400.24.1.el6uek.x86_64.img
적용하려면 서버를 다시 시작해야 합니다.
또는 이 명령을 /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
한 커널에서 다음 커널로 업그레이드할 때 첫 번째 옵션이 설정되지 않을 위험이 있으므로 두 번째 옵션을 선택하겠습니다.
다음 명령을 사용하여 재부팅 후 작동하는지 확인할 수 있습니다.
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
답변2
MariaDB용 TokuDB를 활성화하기 위해 CentOS v6에서 투명한 hugepage를 비활성화하려고 할 때 이 질문에 추가하고 싶었습니다. /etc/rc.local
투명한 hugepages를 비활성화하는 @slm에서 언급한 스크립트를 추가했습니다 . 그러나 Linux에서 시작 스크립트가 작동하는 방식으로 인해 /etc/rc.local
모든 서비스가 시작된 후에 실행됩니다. 따라서 MariaDB가 시작된 후 투명 거대 페이지가 비활성화되고 TokuDB 엔진이 초기화되지 않습니다. 투명 거대 페이지를 비활성화하는 유일한 다른 방법은 transparent_hugepage=never
커널 매개변수에 추가하는 것입니다.
@Rwky 님의 댓글을 보고 You can make the first option survive kernel updates by adding transparent_hugepage=never to the GRUB_CMDLINE_LINUX_DEFAULT option in /etc/default/grub on most distributions.
CentOS가 해당 파일을 지원하지 않는다는 사실을 알게 되었고 , 업데이트 시 커널 매개변수에서 사라질까 /etc/default/grub
봐 걱정이 되었습니다 . transparent_hugepage=never
하지만 걱정하지 마십시오. CentOS는 grub의 커널 매개 변수에 대한 변경 사항을 유지하여 업데이트 전반에 걸쳐 유지되도록 설정되어 있습니다.
또한 추가하려면 grub 커널 매개변수를 수정하는 올바른 방법은 를 사용하는 것입니다 . 각 커널에 grubby
추가하기 위해 다음과 같은 간단한 스크립트를 만들었습니다 .transparent_hugepage=never
grubby
#!/bin/sh
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
for KERNEL in /boot/vmlinuz-*; do
grubby --update-kernel="$KERNEL" --args='transparent_hugepage=never'
done
답변3
꼭두각시를 사용한 구현은 다음과 같습니다.
exec { "disable_transparent_hugepage_enabled":
command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled",
unless => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/enabled 2>/dev/null",
}
exec { "disable_transparent_hugepage_defrag":
command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag",
unless => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/defrag 2>/dev/null",
}
답변4
파일 만들기
sudo vim /etc/systemd/system/disable-transparent-huge-pages.service
서비스 파일에 넣어주세요
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
데비안/우분투 사용자의 경우
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
그런 다음 서비스를 활성화하십시오.
systemctl enable disable-transparent-huge-pages
systemctl start disable-transparent-huge-pages
systemctl status disable-transparent-huge-pages