CentOS从零开始优化性能的全流程指南
在开始优化前,建立性能基准是关键,用于后续对比优化效果。使用以下工具进行初始检测:
sysstat(包含iostat、vmstat、sar)、dstat(实时监控CPU、内存、磁盘、网络);stress(模拟CPU、内存负载)、iperf3(测试网络吞吐量)、fio(测试磁盘I/O性能);Grafana+Prometheus(搭建长期性能监控面板)。yum install sysstat dstat stress iperf3 fio -y
systemctl enable sysstat && systemctl start sysstat
记录初始指标(如CPU空闲率、内存使用率、磁盘I/O等待时间、网络延迟),作为优化效果的参照。
内核参数是性能优化的核心,需修改/etc/sysctl.conf文件(永久生效)并通过sysctl -p应用更改。以下是关键参数及说明:
vm.swappiness=10:降低Swap使用优先级(默认60),避免物理内存充足时误用Swap导致性能抖动;vm.dirty_ratio=20:系统内存脏页(未写入磁盘的修改)占比阈值(默认20%),超过则触发后台刷盘;vm.dirty_background_ratio=10:后台刷脏页的触发阈值(默认10%),减少磁盘I/O峰值。net.core.somaxconn=65535:增加TCP连接队列长度(默认128),解决高并发下“连接数耗尽”问题;net.ipv4.tcp_max_syn_backlog=65535:扩大SYN队列长度(默认512),应对SYN Flood攻击或高并发连接请求;net.ipv4.tcp_fin_timeout=30:缩短FIN_WAIT_2状态的超时时间(默认60s),释放僵尸连接;net.ipv4.tcp_tw_reuse=1:允许复用TIME_WAIT状态的套接字(默认0),提升端口利用率;net.ipv4.tcp_fastopen=3:启用TCP Fast Open(TFO),减少握手延迟(需内核4.9+)。fs.file-max=1000000:增加系统最大文件句柄数(默认约10万),适用于Nginx、MySQL等需要处理大量文件的场景;fs.inotify.max_user_watches=65536:扩大inotify监控文件数上限(默认约8000),避免监控大量文件时出现“Watch limit reached”错误。默认情况下,Linux对用户/进程的资源限制较严格,需修改/etc/security/limits.conf文件(永久生效),提升关键服务的资源上限:
* soft nofile 65535 # 单进程最大打开文件数(软限制)
* hard nofile 100000 # 单进程最大打开文件数(硬限制)
* soft nproc 65535 # 单用户最大进程数(软限制)
* hard nproc 100000 # 单用户最大进程数(硬限制)
生效方式:重启系统或执行ulimit -n 65535临时生效(仅当前会话有效)。
选择合适的文件系统:
XFS(高性能、支持大文件、日志功能完善)或ext4(兼容性好);noatime(禁止记录文件访问时间)、nodiratime(禁止记录目录访问时间),减少磁盘写操作。/etc/fstab配置):/dev/sda1 / xfs defaults,noatime,nodiratime 0 0
挂载后执行mount -a生效。
调整I/O调度器:
根据磁盘类型选择调度器(通过cat /sys/block/sda/queue/scheduler查看当前调度器):
noop(无队列逻辑,直接提交请求,避免额外调度开销);deadline(避免IO饥饿,适合机械硬盘的顺序/随机读写);noop(宿主物理机已处理调度)。/etc/default/grub文件,在GRUB_CMDLINE_LINUX中添加elevator=noop,然后执行grub2-mkconfig -o /boot/grub2/grub.cfg更新GRUB配置。关闭透明大页(THP):
THP(Transparent Huge Pages)会合并小内存页为大页,增加内存管理开销(尤其是数据库场景),需关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:将上述命令添加到/etc/rc.local文件(需赋予执行权限chmod +x /etc/rc.local)。
启用TCP BBR拥塞控制:
BBR(Bottleneck Bandwidth and RTT)是谷歌开发的拥塞控制算法,能显著提升高带宽、高延迟网络的吞吐量(如跨机房、跨地域传输)。
操作步骤:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
验证是否启用:ss -s(查看“retrans”重传率是否降低)。
多队列网卡优化:
若网卡支持多队列(如Intel千兆/万兆网卡),可通过ethtool启用多队列,提升网络吞吐量:
ethtool -l eth0 # 查看当前队列数(如Combined=1)
ethtool -L eth0 combined 8 # 设置为8个队列(需网卡和驱动支持)
永久生效:将上述命令添加到/etc/rc.local文件。
关闭不必要的服务:
使用systemctl命令停止并禁用不需要的服务(如firewalld、NetworkManager,若无需防火墙或网络管理):
systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager
列出所有运行中的服务:systemctl list-units --type=service --state=running,根据业务需求禁用无用服务。
调整服务配置:
针对常用服务(如Nginx、MySQL),优化其配置文件以提升性能:
worker_processes(设为CPU核心数,如worker_processes 4)、worker_connections(每个worker的最大连接数,如worker_connections 65535);innodb_buffer_pool_size(InnoDB缓冲池大小,设为物理内存的50%-70%,如innodb_buffer_pool_size=4G)、max_connections(最大连接数,如max_connections=200)。升级硬件:
RAID配置:
使用RAID技术提升磁盘性能和冗余:
定期监控:
使用dstat实时监控系统状态:
dstat -tcmnd --disk-util --top-cpu # 显示时间、CPU、内存、磁盘使用率、TOP CPU进程
使用sar查看历史性能数据:
sar -u 1 5 # 查看CPU使用率(1秒采样,共5次)
sar -d 1 5 # 查看磁盘I/O使用率
压力测试:
优化后进行压力测试,验证性能提升效果:
stress --cpu 4 --timeout 600(模拟4个CPU核心满载运行10分钟);memtester 2G 60(测试2G内存的正确性,运行60秒);fio --name=test --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based(模拟4个线程随机读取1G文件,运行60秒);iperf3 -c server_ip -t 30 -P 10(客户端向服务器发送10个并行TCP流,测试30秒)。回滚机制:
优化前备份所有配置文件(如/etc/sysctl.conf、/etc/fstab、服务配置文件),若优化后出现性能下降或稳定性问题,可快速恢复:
cp /etc/sysctl.conf.bak /etc/sysctl.conf
cp /etc/fstab.bak /etc/fstab
systemctl restart network
通过以上步骤,可从内核、资源、磁盘、网络、服务、硬件等多个层面优化CentOS性能,逐步提升系统吞吐量、降低延迟、增强稳定性。需注意的是,优化需循序渐进,每次只修改1-2个参数,监控72小时后再进行下一步,避免因参数冲突导致系统崩溃。