外观
OceanBase 操作系统优化
Linux 内核参数优化
内存管理优化
内存分配优化
txt
# 调整内存分配策略
vm.overcommit_memory = 1
# 说明:设置为1表示允许内核根据需要分配内存,适合数据库系统
# 调整内存过度分配比例
vm.overcommit_ratio = 90
# 说明:设置为90表示允许内存过度分配到物理内存的90%
# 调整内存回收策略
vm.swappiness = 10
# 说明:设置为10表示尽量使用物理内存,减少交换空间使用
# 调整脏页回写比例
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
# 说明:dirty_ratio表示系统脏页比例达到20%时,进程会被阻塞并将脏页写回磁盘
# dirty_background_ratio表示系统脏页比例达到10%时,后台进程开始写回脏页
# 调整脏页回写延迟
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
# 说明:dirty_writeback_centisecs表示后台写回进程的唤醒间隔(5秒)
# dirty_expire_centisecs表示脏页的过期时间(30秒)大页内存优化
txt
# 启用透明大页
transparent_hugepage=always
transparent_hugepage_defrag=defer
# 说明:启用透明大页可以提高内存访问效率
# 调整大页大小
# 方法1:使用sysctl设置
vm.nr_hugepages = 1024
# 说明:设置大页数量为1024,每个大页默认2MB,共2GB大页内存
# 方法2:挂载大页文件系统
mount -t hugetlbfs -o pagesize=2M hugetlbfs /dev/hugepages
# 说明:挂载2MB大小的大页文件系统文件系统优化
文件系统类型选择
- 推荐文件系统:XFS
- 备选文件系统:Ext4
- 不推荐:Btrfs、ReiserFS
文件系统挂载参数
txt
# XFS 文件系统挂载参数
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k,nobarrier 0 0
# Ext4 文件系统挂载参数
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,barrier=0,data=writeback,commit=60 0 0
# 说明:
# noatime/nodiratime:禁用访问时间更新
# logbufs/logbsize:调整日志缓冲区大小
# nobarrier/barrier=0:禁用写屏障,提高写入性能
# data=writeback:使用writeback数据模式,提高写入性能
# commit=60:设置事务提交间隔为60秒网络参数优化
TCP 协议优化
txt
# 调整TCP连接队列大小
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 10000
# 调整TCP连接超时参数
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 30
# 启用TCP快速回收和重用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# 调整TCP缓冲区大小
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# 启用TCP窗口缩放
net.ipv4.tcp_window_scaling = 1
# 启用TCP时间戳
net.ipv4.tcp_timestamps = 1
# 调整TCP拥塞控制算法
net.ipv4.tcp_congestion_control = bbr
# 说明:BBR算法适合高带宽低延迟网络UDP 协议优化
txt
# 调整UDP缓冲区大小
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216进程调度优化
CPU 调度策略
txt
# 调整进程调度策略
kernel.sched_autogroup_enabled = 0
# 说明:禁用自动分组调度,提高数据库进程优先级
# 调整实时进程优先级范围
kernel.sched_rt_runtime_us = -1
# 说明:设置为-1表示实时进程可以无限使用CPUNUMA 架构优化
txt
# 查看NUMA节点信息
numactl --hardware
# 运行进程时绑定NUMA节点
numactl --cpunodebind=0 --membind=0 ./observer
# 或在启动脚本中设置
OB_SERVER_NUMA_NODE=0文件系统优化
XFS 文件系统优化
XFS 格式化参数
bash
# 格式化XFS文件系统
mkfs.xfs -f -i size=512 -l size=128m,version=2 /dev/sdb1
# 说明:
# -i size=512:设置inode大小为512字节
# -l size=128m:设置日志大小为128MB
# -l version=2:使用版本2的日志格式XFS 挂载参数
txt
# XFS 最佳挂载参数
/dev/sdb1 /data xfs defaults,noatime,nodiratime,allocsize=16m,logbufs=8,logbsize=256k,nobarrier 0 0
# 说明:
# allocsize=16m:设置预分配大小为16MB,提高大文件写入性能
# logbufs=8:设置日志缓冲区数量为8
# logbsize=256k:设置日志缓冲区大小为256KB
# nobarrier:禁用写屏障,提高写入性能Ext4 文件系统优化
Ext4 格式化参数
bash
# 格式化Ext4文件系统
mkfs.ext4 -T largefile -i 8192 -I 256 /dev/sdb1
# 说明:
# -T largefile:针对大文件优化
# -i 8192:设置inode比例,每8192字节一个inode
# -I 256:设置inode大小为256字节Ext4 挂载参数
txt
# Ext4 最佳挂载参数
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,barrier=0,data=writeback,commit=60,delalloc,max_batch_time=2000 0 0
# 说明:
# barrier=0:禁用写屏障,提高写入性能
# data=writeback:使用writeback数据模式,提高写入性能
# commit=60:设置事务提交间隔为60秒
# delalloc:启用延迟分配,提高写入性能
# max_batch_time=2000:设置最大批处理时间为2000毫秒磁盘 I/O 调度器优化
调度器选择
bash
# 查看支持的I/O调度器
cat /sys/block/sdb/queue/scheduler
# 设置I/O调度器为none(适合SSD)
echo none > /sys/block/sdb/queue/scheduler
# 或在启动时设置
# 在/etc/default/grub中添加
GRUB_CMDLINE_LINUX_DEFAULT="elevator=none"
# 然后更新grub
update-grub调度器参数调整
bash
# 调整队列深度
echo 256 > /sys/block/sdb/queue/nr_requests
# 调整读取 Ahead 大小
echo 2048 > /sys/block/sdb/queue/read_ahead_kb
# 启用NCQ(Native Command Queuing)
echo 1 > /sys/block/sdb/queue/iosched/fifo_batch网络优化
网络接口优化
网卡参数调整
bash
# 查看网卡信息
ethtool eth0
# 启用千兆/万兆网卡全双工
ethtool -s eth0 speed 1000 duplex full autoneg off
# 启用 Jumbo Frames
ethtool -s eth0 mtu 9000
# 启用 RSS(Receive Side Scaling)
ethtool -L eth0 combined 4
# 启用 RPS(Receive Packet Steering)
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus网络缓冲区优化
txt
# 调整网络缓冲区大小
net.core.rmem_default = 262144
net.core.rmem_max = 67108864
net.core.wmem_default = 262144
net.core.wmem_max = 67108864
# 调整TCP缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864网络连接优化
连接数优化
txt
# 调整文件描述符限制
fs.file-max = 655350
# 调整用户文件描述符限制
# 在/etc/security/limits.conf中添加
* soft nofile 65535
* hard nofile 655350
# 调整进程最大文件描述符数
fs.nr_open = 655350TCP 连接优化
txt
# 调整TCP最大连接数
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
# 调整TIME_WAIT状态连接数
net.ipv4.tcp_max_tw_buckets = 10000
# 启用TIME_WAIT状态连接重用
net.ipv4.tcp_tw_reuse = 1
# 调整FIN_WAIT_2状态超时时间
net.ipv4.tcp_fin_timeout = 30系统服务优化
禁用不必要的服务
bash
# 禁用不必要的系统服务
systemctl disable firewalld
systemctl disable NetworkManager
systemctl disable postfix
systemctl disable chronyd
systemctl disable rsyslog
# 启用必要的服务
systemctl enable sshd
systemctl enable ntpd
systemctl enable tuned调整系统日志级别
bash
# 调整syslog日志级别
# 在/etc/rsyslog.conf中添加
*.warning;mail.none;authpriv.none;cron.none /var/log/messages
# 调整内核日志级别
echo 4 > /proc/sys/kernel/printk调整系统时间同步
bash
# 安装NTP服务
yum install -y ntp
# 配置NTP服务器
# 在/etc/ntp.conf中添加
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
# 启动NTP服务
systemctl start ntpd
systemctl enable ntpd
# 验证时间同步
ntpq -p资源限制优化
用户资源限制
bash
# 在/etc/security/limits.conf中添加
* soft nofile 65535
* hard nofile 655350
* soft nproc 65535
* hard nproc 655350
* soft stack 8192
* hard stack 16384
* soft core unlimited
* hard core unlimited进程资源限制
bash
# 调整PAM限制
# 在/etc/pam.d/login中添加
session required pam_limits.so
# 在/etc/pam.d/su中添加
session required pam_limits.so临时资源限制
bash
# 临时调整当前会话的资源限制
ulimit -n 65535
ulimit -u 65535
ulimit -s 16384性能监控与调优
系统性能监控
使用 sar 监控系统性能
bash
# 安装sysstat包
yum install -y sysstat
# 启动sar服务
systemctl start sysstat
systemctl enable sysstat
# 查看CPU使用率
sar -u 1 5
# 查看内存使用率
sar -r 1 5
# 查看磁盘I/O
sar -d 1 5
# 查看网络统计
sar -n DEV 1 5使用 vmstat 监控内存和进程
bash
# 查看内存和进程状态
vmstat 1 5
# 输出说明:
# procs:进程状态
# memory:内存使用情况
# swap:交换空间使用情况
# io:I/O统计
# system:系统统计
# cpu:CPU使用情况使用 iostat 监控磁盘I/O
bash
# 查看磁盘I/O统计
iostat -dx 1 5
# 输出说明:
# r/s, w/s:每秒读写次数
# rkB/s, wkB/s:每秒读写数据量
# avgrq-sz:平均请求大小
# avgqu-sz:平均队列长度
# await:平均等待时间
# svctm:平均服务时间
# %util:设备利用率使用 netstat 监控网络连接
bash
# 查看网络连接状态
netstat -an | grep ESTABLISHED | wc -l
# 查看TCP连接状态分布
netstat -an | grep -E '^(tcp|udp)' | awk '{print $6}' | sort | uniq -c
# 查看监听端口
netstat -tuln性能调优建议
CPU 调优
启用 CPU 性能模式:
bashcpupower frequency-set -g performance禁用 CPU 节能模式:
bashecho performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor绑定进程到 CPU 核心:
bashtaskset -cp 0-3 <pid>
内存调优
使用大页内存:
bash# 启用透明大页 echo always > /sys/kernel/mm/transparent_hugepage/enabled echo defer > /sys/kernel/mm/transparent_hugepage/defrag调整内存回收策略:
bashecho 10 > /proc/sys/vm/swappiness
磁盘 I/O 调优
- 使用 SSD 存储:优先选择 NVMe SSD
- 调整 I/O 调度器:对于 SSD,使用 none 或 noop 调度器
- 优化 RAID 配置:使用 RAID 10 或 RAID 5/6
- 合理规划分区:将数据、日志、备份分开存储
网络调优
- 启用 Jumbo Frames:适合万兆网络
- 使用 BBR 拥塞控制算法:bash
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control - 调整 TCP 缓冲区大小:增加最大缓冲区大小
操作系统安全优化
禁用不必要的内核模块
bash
# 在/etc/modprobe.d/blacklist.conf中添加
blacklist bluetooth
blacklist ipv6
blacklist firewire-core
blacklist usb-storage启用内核安全特性
txt
# 启用地址空间布局随机化
kernel.randomize_va_space = 2
# 启用栈保护
kernel.exec-shield = 1
# 禁用核心转储
fs.suid_dumpable = 0
# 启用SYN cookies
net.ipv4.tcp_syncookies = 1
# 禁用IP转发
net.ipv4.ip_forward = 0
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0调整系统文件权限
bash
# 设置关键文件权限
chmod 600 /etc/shadow
chmod 644 /etc/passwd
chmod 600 /etc/ssh/sshd_config
# 禁用SUID/SGID位
find / -type f -perm /6000 -exec chmod a-s {} \;操作系统优化最佳实践
部署前优化
选择合适的操作系统版本:
- 推荐使用 CentOS 7.6 或以上版本
- 或使用 Red Hat Enterprise Linux 7.6 或以上版本
- 内核版本推荐 3.10.0-957 或以上
更新系统补丁:
bashyum update -y配置 RAID 阵列:
- 数据盘:推荐 RAID 10
- 日志盘:推荐 RAID 1
- 备份盘:推荐 RAID 5 或 RAID 6
分区规划:
- /:建议 50GB
- swap:建议 8GB(如果内存足够大,可以更小)
- /data:剩余空间,用于存储数据文件
- /redo:独立分区,用于存储日志文件
运行时优化
定期监控系统性能:
- 建立性能基线
- 定期分析性能趋势
- 及时发现性能瓶颈
定期清理系统:
- 清理临时文件:
rm -rf /tmp/* - 清理日志文件:
logrotate -f /etc/logrotate.conf - 清理未使用的软件包:
yum autoremove -y
- 清理临时文件:
调整系统时间:
- 使用 NTP 服务保持时间同步
- 定期验证时间准确性
备份配置文件:
- 备份 /etc/sysctl.conf
- 备份 /etc/fstab
- 备份 /etc/security/limits.conf
优化验证
性能测试:
- 使用 sysbench 测试 CPU、内存、磁盘 I/O
- 使用 tpcc-mysql 测试数据库性能
- 使用 iperf 测试网络带宽
稳定性测试:
- 运行长时间压力测试
- 测试故障恢复能力
- 测试系统重启后的恢复能力
安全测试:
- 运行安全扫描工具
- 检查系统漏洞
- 验证安全配置
常见问题处理
内存不足
症状
- 系统内存使用率接近 100%
- 出现 Out of Memory (OOM) 错误
- 进程被 OOM killer 杀死
- 系统响应缓慢
解决方案
增加物理内存:
- 扩展服务器内存容量
- 或添加新的服务器节点
优化内存使用:
- 调整 OceanBase 内存配置
- 减少其他进程的内存占用
- 关闭不必要的服务
调整 OOM 策略:
bash# 调整 OOM 评分 echo -1000 > /proc/<pid>/oom_score_adj
磁盘 I/O 瓶颈
症状
- 磁盘利用率接近 100%
- I/O 等待时间长
- 读写延迟高
- 应用响应缓慢
解决方案
升级存储设备:
- 从 HDD 升级到 SSD
- 从 SATA SSD 升级到 NVMe SSD
优化 I/O 配置:
- 调整 I/O 调度器
- 优化文件系统参数
- 调整 RAID 配置
优化应用配置:
- 调整 OceanBase I/O 配置
- 优化查询语句,减少 I/O 操作
- 增加缓存,减少磁盘访问
网络连接问题
症状
- 连接超时
- 丢包率高
- 网络延迟大
- 连接数达到上限
解决方案
优化网络配置:
- 调整 TCP 参数
- 增加连接数限制
- 启用连接重用
检查网络设备:
- 检查网线连接
- 检查交换机配置
- 检查防火墙规则
优化应用配置:
- 调整连接池配置
- 减少连接超时时间
- 增加重试机制
常见问题(FAQ)
Q1: 如何选择合适的 Linux 内核版本?
A1: 选择 Linux 内核版本的建议:
- 推荐使用 CentOS 7.6 或以上版本,内核版本 3.10.0-957 或以上
- 对于生产环境,建议使用稳定版本,避免使用最新版本
- 考虑硬件兼容性,选择支持硬件的最新稳定版本
Q2: 如何验证内核参数是否生效?
A2: 验证内核参数是否生效的方法:
bash
# 查看单个参数值
sysctl -n vm.swappiness
# 查看所有参数值
sysctl -a
# 检查文件系统挂载参数
mount | grep /data
# 检查资源限制
ulimit -aQ3: 如何备份当前的系统配置?
A3: 备份系统配置的方法:
bash
# 备份内核参数
cp /etc/sysctl.conf /etc/sysctl.conf.bak
# 备份文件系统挂载配置
cp /etc/fstab /etc/fstab.bak
# 备份资源限制配置
cp /etc/security/limits.conf /etc/security/limits.conf.bak
# 备份网络配置
cp -r /etc/sysconfig/network-scripts /etc/sysconfig/network-scripts.bakQ4: 透明大页和普通大页有什么区别?
A4: 透明大页和普通大页的区别:
- 透明大页:由内核自动管理,无需手动配置,适合大多数场景
- 普通大页:需要手动配置和管理,适合对性能要求极高的场景
- 性能:透明大页性能略低于普通大页,但管理更方便
- 兼容性:透明大页可能与某些应用不兼容,需要测试
Q5: 如何调整 OceanBase 进程的优先级?
A5: 调整 OceanBase 进程优先级的方法:
bash
# 使用 nice 命令调整优先级
nice -n -10 ./observer
# 使用 renice 命令调整现有进程优先级
renice -n -10 <pid>
# 使用 chrt 命令设置实时优先级
chrt -f -p 50 <pid>Q6: 如何优化 SSD 存储性能?
A6: 优化 SSD 存储性能的方法:
- 使用合适的 I/O 调度器:none 或 noop
- 启用 TRIM 功能:
fstrim -v /data - 优化文件系统挂载参数
- 避免频繁的小文件写入
- 合理规划分区,避免分区过满
Q7: 如何处理系统日志过大的问题?
A7: 处理系统日志过大的方法:
- 调整日志级别,减少日志输出
- 配置日志轮转,定期压缩和清理日志
- 使用 syslog-ng 或 rsyslog 进行日志管理
- 将日志发送到远程日志服务器
- 清理旧日志文件
Q8: 如何优化系统启动时间?
A8: 优化系统启动时间的方法:
- 禁用不必要的系统服务
- 优化内核参数,减少启动时的检查
- 使用固态硬盘,提高启动速度
- 优化启动项,减少自启动程序
- 配置快速启动选项
Q9: 如何监控系统资源使用情况?
A9: 监控系统资源使用情况的方法:
- 使用系统自带工具:sar、vmstat、iostat、netstat
- 使用第三方工具:htop、atop、glances
- 使用监控系统:Zabbix、Prometheus + Grafana
- 配置告警规则,及时发现资源异常
Q10: 如何恢复系统默认配置?
A10: 恢复系统默认配置的方法:
bash
# 恢复内核参数默认值
cp /etc/sysctl.conf.bak /etc/sysctl.conf
sysctl -p
# 恢复文件系统挂载配置
cp /etc/fstab.bak /etc/fstab
# 恢复资源限制配置
cp /etc/security/limits.conf.bak /etc/security/limits.conf
# 重启系统使配置生效
reboot