操作系统
修改/boot/grub2/grub.cfg
定位到第一个‘menuentry 'CentOS Linux’,在“linux16 /vmlinuz”最后面添加
numa=off transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1536
*hugepagesz表示页面大小,2M和1G选其一,默认为2M。
hugepages表示大页面数
总共大页面内存量为hugepagesz*hugepages,这里为3G
例子:
menuentry 'CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-d8179b22-8b44-4552-bf2a-04bae2a5f5dd' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 34f87a8d-8b73-4f80-b0ff-8d49b17975ca
else
search --no-floppy --fs-uuid --set=root 34f87a8d-8b73-4f80-b0ff-8d49b17975ca
fi
linux16 /vmlinuz-3.10.0-693.5.2.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 numa=off transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1536
initrd16 /initramfs-3.10.0-693.5.2.el7.x86_64.img
}
重启系统
重启后可以使用grep Huge /proc/meminfo查看配置情况。看到下面的数据表示已经生效
HugePages_Total: 1536
HugePages_Free: 1499
HugePages_Rsvd: 1024
HugePages_Surp: 0
Hugepagesize: 2048 kB
数据库配置
postgresql.conf
huge_pages = on
shared_buffers = 2GB # 使用2G内存,这个值需要小于总共大页面内存量
注意
如果postgresql.conf配置huge_pages=on时,且shared_buffers值等于huge_page总内存量(hugepagesz*hugepages)时,数据库无法启动,报如下错误:
This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space.
解决办法shared、_buffers值要小于huge_page总内存量