本文整理从各个数据库厂商采集的,在大数据库下,linux操作系统在CPU、内存、存储和网络等方面参数优化的方案。
目录导航
参考
本文以redhat 7为基础介绍,不建议再使用redhat 6系列。
存储、文件
I/O 调度器
I/O 调度程序确定 I/O 操作何时在存储设备上运行以及持续多长时间。也称为 I/O 升降机。
对于 SSD 设备,宜设置为 noop。
echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler
对于普通机械磁盘,则建议用deadline调度策略。
echo deadline > /sys/block/${SSD_DEV_NAME}/queue/scheduler
当然参数需要加入开启自启动里面,比如/etc/rc.local。
格式化参数——块大小
块是文件系统的工作单元。块大小决定了单个块中可以存储多少数据,因此决定了一次写入或读取的最小数据量。
默认块大小适用于大多数使用情况。但是,如果块大小(或多个块的大小)与通常一次读取或写入的数据量相同或稍大,则文件系统将性能更好,数据存储效率更高。小文件仍将使用整个块。文件可以分布在多个块中,但这会增加运行时开销。
使用 mkfs 命令格式化设备时,将块大小指定为文件系统选项的一部分。指定块大小的参数随文件系统的不同而不同。有关详细信息,请查询对应文件系统的 mkfs
手册页,比如 man mkfs.ext4
。
挂载参数
noatime
读取文件时,将禁用对元数据的更新。它还启用了 nodiratime 行为,该行为会在读取目录时禁用对元数据的更新。
nodelalloc
禁用延迟分配,在数据从用户空间复制到页缓存时,就分配块。
最大打开文件数
对于数据库,当表很多时,特别是对于列存数据库,其打开的文件描述符(File Descriptor)是很多的。建议提高到655360。
查看和设置方法,请参考 https://www.gbase8.cn/3332
内存
内存——透明大页
对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。若开启针对 THP 的直接内存规整功能,也会出现系统 CPU 使用率激增的现象,因此建议关闭 THP。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
内存——虚拟内存参数
dirty_ratio
百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统将开始使用 pdflush 操作将脏的 page cache 写入磁盘。默认值为 20%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,降低其值有利于提高内存回收时的效率。dirty_background_ratio
百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统开始在后台将脏的 page cache 写入磁盘。默认值为 10%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,设置较低的值有利于提高内存回收时的效率。
NUMA 绑核
为尽可能的避免跨 NUMA 访问内存,可以通过设置线程的 CPU 亲和性来实现 NUMA 绑核。对于普通程序,可使用 numactl
命令来绑定,具体用法请查询 man
手册。对于网卡中断,请参考下文网络章节。
SWAP
调节swappiness内核参数降低系统对swap的使用,从而避免不必要的swap对性能造成的影响。
注意,如果配置文件 /etc/sysctl.conf 里已经存在这个参数,建议直接修改,然后sysctl -p生效。否则可以追加到末尾或手工追加一行。
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p
CPU
处理器——动态节能技术
cpufreq 是一个动态调整 CPU 频率的模块,可支持8种模式。
- ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核默认的方式都是ondemand。
- interactive:交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般。
- conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。
- smartass:聪明模式,是I和C模式的升级,该模式在比interactive 模式不差的响应的前提下会做到了更加省电。
- performance:性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量。
- powersave 省电模式,通常以最低频率运行。
- userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
- Hotplug:类似于ondemand, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电
为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节,操作命令为 。
cpupower frequency-set --governor performance
网络、连接
sshd 服务的连接数限制
- 修改
/etc/ssh/sshd_config
将MaxSessions
调至 20。 - 重启 sshd 服务:Copy
service sshd restart
防火墙
如果明确知道所需要开放的端口和协议类型,则可以单独设置防火墙策略,比如白名单中,否则建议关闭防火墙。
检查防火墙状态
systemctl status firewalld.service
关闭防火墙服务
systemctl stop firewalld.service
关闭防火墙自动启动服务
systemctl disable firewalld.service
服务
NTP 服务
分布式数据库系统,需要节点间保证时间的同步。
检查服务是否安装
systemctl status ntpd.service
检测是否与 NTP 服务器同步,如果输出 synchronised to NTP server
,表示正在与 NTP 服务器正常同步
ntpstat
安装服和配置时钟同步的方法,本文不做累述,请自行搜索。
参考资料
https://docs.pingcap.com/zh/tidb/stable/tune-operating-system