前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >YashanDB 安装前操作系统参数调整

YashanDB 安装前操作系统参数调整

原创
作者头像
用户10349277
修改2025-03-06 11:26:01
修改2025-03-06 11:26:01
7800
代码可运行
举报
运行总次数:0
代码可运行

当 YashanDB 安装在 Linux 环境中时,为使系统达到更好的性能,建议进行下述配置调整。

Note

  • 建议对分布式部署中的所有服务器执行下述调整,否则在业务运行将系统资源耗尽的极端场景中将出现服务退出或业务执行卡顿、报错等异常。
  • 在搭建测试环境或实验环境时,为方便问题定位,可以打开生成 core 文件的开关(使用 ulimit -c 查看当前状态),不建议在生产环境中打开此开关以免影响系统效率。具体操作如下:
代码语言:txt
复制
 ulimit -c unlimited 
# vi /etc/security/limits.conf

# 添加以下信息并保存:
  - soft core unlimited
  - hard core unlimited

设置服务器 hostname(共享集群)

Note: 若部署 YashanDB 共享集群,必须执行本操作。

服务器名称要求如下:

  • 名称由字母、数字以及下划线组成,且必须以字母开头,长度为[4,64]个字符。
  • 同一个 YashanDB 共享集群中的服务器名称不能相同。
  • 建议每台服务器上只运行一个实例,若一台服务器需运行多个实例则要求将服务器名称设置为[3,63]个字符。
  1. 执行如下命令,可查看 hostname。
代码语言:txt
复制
# hostnamectl

2.执行如下命令,可按需设置 hostname。

代码语言:txt
复制
# hostnamectl set-hostname instance1

关闭交换分区

使用sysctl -a | grep swappiness查看当前状态,建议设置为 0 以减少内存交换,避免影响系统性能。

代码语言:txt
复制
# sysctl -w vm.swappiness=0
# echo "vm.swappiness=0">> /etc/sysctl.conf

调整自动分配本地端口范围

使用cat /proc/sys/net/ipv4/ip_local_port_range查看连接可用的本地端口范围,下限值建议大于 30000 以减少端口冲突。

代码语言:javascript
代码运行次数:0
运行
复制
# sysctl -w net.ipv4.ip_local_port_range='32768 60999' 
# echo "net.ipv4.ip_local_port_range=32768 60999" >> /etc/sysctl.conf

本操作对 IPv6 同样生效。

调整进程的 VMA 上限

使用sysctl -a|grep vm.max_map_count查看当前上限值,建议大于 2000000 以增大数据库进程可拥有的 VMA 大小。

代码语言:javascript
代码运行次数:0
运行
复制
# sysctl -w vm.max_map_count=2000000
# echo "vm.max_map_count=2000000" >> /etc/sysctl.conf 

调整资源限制值

将部分资源限制值(使用 ulimit -a 可查看所有的资源限制值)调整为推荐值或以上,详细信息如下表所示,其中yashan为规划的数据库安装用户示例(具体用户名需以实际规划为准)。

配置大页内存

YashanDB 利用大页内存提高内存访问效率。标准大页内存会在系统启动时预分配,而透明大页会在运行时动态分配大页内存,可能产生运行时错误,造成 YashanDB 被终止。

建议在安装时配置操作系统,启用大页内存,关闭透明大页(Transparent HugePages)选项,YashanDB 服务安装完成后,如需使用大页内存,请修改数据库配置参数USE_LARGE_PAGES为 TRUE 或 ONLY。

Note: 本文仅以适用于大部分 Linux 的操作步骤为例介绍如何配置大页内存,若实际步骤存在差异,建议参考对应操作系统的官方指引或联系系统服务商解决。

如需深入了解大页内存细节,请参考Linux 内核文档 (opens new window)

启用大页内存

1.执行如下命令查看当前大页内存配置:(回显信息以实际为准)

代码语言:javascript
代码运行次数:0
运行
复制
# grep -i huge /proc/meminfo
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

  • AnonHugePages:当前透明大页使用的内存总量,可参考本文档关闭。
  • HugePages_Total:大页池中页面总数。
  • HugePages_Free:大页池中空闲页面数。
  • HugePages_Rsvd:系统预留(reserved)的页面数。表示应用已申请了对应数量的大页,但由于应用尚未访问这些页面,系统还没有真正从物理内存分配这些页面。应用最多还能申请HugePages_Free - HugePages_Rsvd个大页。
  • HugePages_Surp:当开启 nr_overcommit_hugepages 时,系统允许换出一些大页,使得系统支持应用申请超出大页池容量的页面,如果应用频繁访问大页,可能对性能存在负面影响。
  • Hugepagesize:大页的尺寸,不同平台支持的大页尺寸有差异,x86 平台支持 2M、1G,通常为 2M。

若 HugePages_Total = 0、HugePages_Free = 0 或 HugePages_Free - HugePages_Rsvd < YashanDB 需求,则需修改系统配置,启用大页内存或增加大页内存池容量。

2.估算大页内存需求,需先估算 YashanDB 的大页内存需求:

根据配置计算 YashanDB 所需内存总量 UserSize,即上述所有配置项的总和(未配置的项目按默认值计算)。如需规划使用 MMS 表空间,还需估计 MMS 表空间所需内存总量 MMSSize。

  • YashanDB 至少需要大页内存空间 LargePageSize = (UserSize + MMSSize + 64M) * 1.2。
  • YashanDB 需要的大页内存页面数 HugePages = Ceil(LargePageSize / Hugepagesize)。

Caution:

若将所有内存都划归大页管理,可能造成系统无法启动或其他异常,请谨慎使用

配置时,需确保系统内存容量足以支持大页配置的数值。

3.启用大页内存并根据上述估算值更改相关配置:

本文以大页尺寸 2M、申请 16 个大页(即规划 32M 大页内存)为例,生产环境配置请以实际为准。

编辑/etc/sysctl.conf 文件:

代码语言:javascript
代码运行次数:0
运行
复制
# vi /etc/sysctl.conf

复制代码

Copied!

追加以下配置:

代码语言:javascript
代码运行次数:0
运行
复制
vm.nr_hugepages=16
vm.nr_overcommit_hugepages=0

4.重启系统生效。

代码语言:javascript
代码运行次数:0
运行
复制
# reboot

关闭透明大页

  1. 部分操作系统默认开启了透明大页选项,可执行以下命令确认:
代码语言:javascript
代码运行次数:0
运行
复制
## Red Hat Enterprise Linux 内核
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

## 其他内核
# cat /sys/kernel/mm/transparent_hugepage/enabled

复制代码

  • 若显示[always] madvise neveralways [madvise] never,则说明透明大页已开启。
  • 若显示always madvise [never],则说明透明大页已关闭。

2.执行vi /etc/default/grub,在GRUB_CMDLINE_LINUX中添加或修改参数transparent_hugepage=never

代码语言:javascript
代码运行次数:0
运行
复制
   GRUB_TIMEOUT=5
   GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
   GRUB_DEFAULT=saved
   GRUB_DISABLE_SUBMENU=true
   GRUB_TERMINAL_OUTPUT="console"
   GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
   GRUB_DISABLE_RECOVERY="true"

3.通过以下指令检查当前系统的引导类型:

代码语言:javascript
代码运行次数:0
运行
复制
# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

两种引导的启动文件路径分别为:

  • BIOS:/boot/grub2/grub.cfg
  • UEFI:/boot/efi/EFI/\<distro_name>/grub.cfgdistro_name为系统发行版本名称,例如ubuntufedoradebian等。

4.执行grub2–mkconfig指令重新配置grub.cfg

代码语言:javascript
代码运行次数:0
运行
复制
## BIOS引导
# grub2-mkconfig -o /boot/grub2/grub.cfg
## UEFI引导
# grub2-mkconfig -o /boot/efi/EFI/<distro_name>/grub.cfg

5.重启操作系统,使配置永久生效。

代码语言:javascript
代码运行次数:0
运行
复制
# reboot

6.验证透明大页已关闭:

代码语言:javascript
代码运行次数:0
运行
复制
## Red Hat Enterprise Linux内核
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

## 其他内核
# cat /sys/kernel/mm/transparent_hugepage/enabled

应显示always madvise [never]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置服务器 hostname(共享集群)
  • 关闭交换分区
  • 调整自动分配本地端口范围
  • 调整进程的 VMA 上限
  • 调整资源限制值
  • 配置大页内存
    • 启用大页内存
    • 关闭透明大页
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档