中国移动磐维数据库(ChinaMobileDB),简称“磐维数据库”(CMDB)。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。
其产品内核能力基于华为 OpenGauss 开源软件,并进一步提升了系统稳定性。
本文将介绍磐维数据库部署之间要进行的内核参数优化,介绍相关参数的作用。
vi /etc/sysctl.conf
# panweidb
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_retries2 = 12
vm.overcommit_memory = 0
net.ipv4.tcp_rmem = 8192 250000 16777216
net.ipv4.tcp_wmem = 8192 250000 16777216
net.core.wmem_max = 21299200
net.core.rmem_max = 21299200
net.core.wmem_default = 21299200
net.core.rmem_default = 21299200
net.ipv4.ip_local_port_range = 26000 65535
kernel.sem = 250 6400000 1000 25600
net.core.somaxconn = 65535
net.ipv4.tcp_syncookies = 1
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 60
kernel.shmall = 1073741824
kernel.shmmax = 751619276800
net.ipv4.tcp_sack = 1
net.ipv4.tcp_timestamps = 1
vm.extfrag_threshold = 500
vm.overcommit_ratio = 90
vm.swappiness = 0
一、网络相关参数
1.net.ipv4.tcp_max_tw_buckets
表示系统中处于 TIME_WAIT
状态的最大连接数量。设置为 10000
即系统中最多同时存在 10000 个 TIME_WAIT
状态的连接。
作用:防止过多的 TIME_WAIT
状态连接占用系统资源。
2.net.ipv4.tcp_tw_reuse
设置为 1
时,允许将 TIME_WAIT
状态的套接字重新用于新的连接。
作用:在一定条件下复用处于 TIME_WAIT
状态的连接,提高连接建立的效率。
3.net.ipv4.tcp_keepalive_time
表示在没有数据传输的情况下,开始发送 keepalive
探测包之前的等待时间,单位为秒。此处设置为 30
秒。
作用:用于检测连接是否仍然有效,及时释放无效连接,节省系统资源。
4.net.ipv4.tcp_keepalive_probes
指定发送 keepalive
探测包的次数。此处设置为 9
次。
作用:与 keepalive
相关,在多次探测无响应后判定连接失效。
5.net.ipv4.tcp_keepalive_intvl
表示发送 keepalive
探测包的时间间隔,单位为秒。此处设置为 30
秒。
作用:控制 keepalive
探测包的发送频率。
6.net.ipv4.tcp_retries1
指定在本地主动建立连接的第一次重传尝试的次数。设置为 5
次。
作用:控制连接建立过程中第一次重传的次数,以提高连接建立的成功率。
7.net.ipv4.tcp_syn_retries
指定在主动建立连接时发送 SYN
包的重传次数。设置为 5
次。
作用:增加 SYN
包重传次数,提高连接建立的成功率。
8.net.ipv4.tcp_synack_retries
指定在被动建立连接(作为服务器端)时发送 SYNACK
包的重传次数。设置为 5
次。
作用:提高服务器端连接建立的成功率。
9.net.ipv4.tcp_retries2
指定在本地主动建立连接的第二次重传尝试的次数。设置为 12
次。
作用:在连接建立的后期阶段控制重传次数,提高连接建立成功率。
10.net.ipv4.tcp_rmem
定义了 TCP
接收缓冲区的大小范围,分别是最小、默认和最大的值。此处分别是 8192
、250000
、16777216
字节。
作用:根据网络状况和应用需求调整接收数据的缓冲区大小,优化数据接收性能。
11.net.ipv4.tcp_wmem
定义了 TCP
发送缓冲区的大小范围,分别是最小、默认和最大的值。此处分别是 8192
、250000
、16777216
字节。
作用:根据网络状况和应用需求调整发送数据的缓冲区大小,优化数据发送性能。
12.net.ipv4.ip_local_port_range
定义了本地 TCP
和 UDP
端口的使用范围。此处设置为从 26000
到 65535
。
作用:控制本地应用程序可使用的端口范围,合理分配端口资源。
13.net.ipv4.tcp_syncookies
设置为 1
时,启用 TCP
同步标记(SYN Cookie
)功能,用于防范 SYN Flood
攻击。
作用:在面临 SYN Flood
攻击时,保护系统的连接建立功能,保障正常连接请求的处理。
14.net.core.somaxconn
指定系统中 Socket
监听队列的最大长度。设置为 65535
。
作用:增加监听队列长度,提高服务器同时处理连接请求的能力。
15.net.ipv4.tcp_max_syn_backlog
指定 TCP
连接请求队列(半连接队列)的最大长度。设置为 65535
。
作用:增加连接请求队列长度,提高系统处理并发连接请求的能力。
16.net.ipv4.tcp_fin_timeout
指定 TCP
连接关闭时,处于 FIN_WAIT_2
状态的连接的超时时间,单位为秒。设置为 60
秒。
作用:及时释放处于 FIN_WAIT_2
状态的连接资源。
17.net.ipv4.tcp_sack
设置为 1
时,启用 TCP
选择性确认(Selective Acknowledgment
,SACK
)功能。
作用:在数据包丢失的情况下,提高数据重传的效率,加快数据传输恢复速度。
18.net.ipv4.tcp_timestamps
设置为 1
时,启用 TCP
时间戳选项。
作用:有助于更精确地计算往返时间(Round-Trip Time
,RTT
),提高拥塞控制和重传机制的性能。
二、内存相关参数
1.vm.overcommit_memory
控制内存分配策略。0
表示检查是否有足够的可用内存来满足内存请求,如果没有则拒绝该请求。
作用:防止内存过度分配导致系统不稳定
2.vm.overcommit_ratio
当 vm.overcommit_memory
设置为 2
时,此参数指定内存过量分配的比例。
作用:与内存过量分配策略相关,用于确定在特定模式下可超额分配的内存比例。
3.vm.swappiness
表示系统使用交换分区(swap
)的倾向程度,取值范围是 0
到 100
,设置为 0
时表示尽量少使用交换分区。
作用:调整系统在内存不足时将内存数据交换到磁盘交换分区的频率。
三、信号量相关参数
1.kernel.sem
设置信号量参数,分别是 SEMMSL
(每个信号集的最大信号数量)、SEMMNS
(系统范围内的最大信号数量)、SEMOPM
(每次 semop()
系统调用可执行的最大操作数量)、SEMMNI
(系统范围内的最大信号集数量)。
作用:控制系统中信号量资源的分配和使用策略。
四、共享内存相关参数
1.kernel.shmall
表示系统一次可以使用的共享内存页的总数。
作用:控制系统可使用的共享内存总量,影响应用程序对共享内存的使用。
2.kernel.shmmax
表示单个共享内存段的最大尺寸。
作用:确定单个共享内存段的大小上限,应用程序创建的共享内存段不能超过此值。
3.vm.extfrag_threshold
内存碎片阈值,用于内存碎片的管理。
作用:当内存碎片程度超过此阈值时,系统会采取相应的碎片整理或内存回收策略。