Linux 系统性能调优需要结合硬件资源、业务场景和系统瓶颈进行针对性优化。以下是系统化的调优思路和常用技巧,涵盖 CPU、内存、磁盘、网络、内核参数 等核心方向:
一、性能分析工具速查
工具 | 用途 | 示例命令 |
---|---|---|
top/htop |
实时监控进程 CPU、内存占用 | htop -d 10 |
vmstat |
查看内存、进程、CPU 上下文切换 | vmstat 1 5 |
iostat |
监控磁盘 I/O 和吞吐量 | iostat -x 1 |
sar |
历史性能数据收集(需安装 sysstat ) |
sar -u 1 3 |
pidstat |
进程级资源监控 | pidstat -d -p <PID> 1 |
perf |
CPU 性能剖析(火焰图生成) | perf record -g -p <PID> |
iftop |
实时网络流量监控 | iftop -i eth0 |
dstat |
综合资源监控(CPU/磁盘/网络) | dstat -tcdngy |
二、通用调优方向与技巧
1. CPU 优化
- 场景:CPU 使用率高、负载飙升、上下文切换频繁
- 调优方法:
- 优先级调整:
nice -n -20 /path/to/command # 提高进程优先级(-20 最高)
- 绑定 CPU 核心(减少上下文切换):
taskset -c 0,1 /path/to/command # 绑定到 CPU 0 和 1
- 中断均衡(多队列网卡):
# 查看中断分布 cat /proc/interrupts | grep eth0 # 手动分配中断到不同 CPU echo 2 > /proc/irq/128/smp_affinity
- 关闭无用服务:
systemctl stop postfix # 示例:关闭邮件服务 systemctl disable postfix
- 优先级调整:
2. 内存优化
- 场景:内存不足、频繁交换(swap)、OOM 触发
- 调优方法:
- 调整 Swappiness(减少交换):
sysctl vm.swappiness=10 # 临时生效 echo "vm.swappiness=10" >> /etc/sysctl.conf # 永久生效
- 透明大页(THP)优化:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 限制进程内存(防止 OOM):
# 使用 cgroups(示例:限制进程组内存为 2GB) cgcreate -g memory:/my_group echo 2G > /sys/fs/cgroup/memory/my_group/memory.limit_in_bytes
- 调整 Swappiness(减少交换):
3. 磁盘 I/O 优化
- 场景:磁盘延迟高、IOPS 饱和、RAID 性能不足
- 调优方法:
- I/O 调度器选择(SSD 推荐
none
或kyber
):echo kyber > /sys/block/sda/queue/scheduler
- 文件系统优化(挂载参数):
# ext4 示例:关闭访问时间记录,提升写性能 mount -o noatime,nodiratime,data=writeback /dev/sda1 /data
- LVM 缓存(加速慢速磁盘):
# 使用 SSD 作为 HDD 的缓存层 lvcreate --type cache-pool -L 100G -n cache_pool vg_ssd /dev/ssd1 lvconvert --type cache --cachepool vg_ssd/cache_pool vg_hdd/lv_data
- I/O 调度器选择(SSD 推荐
4. 网络优化
- 场景:网络吞吐低、丢包、TCP 连接数不足
- 调优方法:
- 内核参数调整(
/etc/sysctl.conf
):# 增大 TCP 缓冲区 net.core.rmem_max=16777216 net.core.wmem_max=16777216 # 加快 TIME_WAIT 回收 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=15 # 扩大端口范围 net.ipv4.ip_local_port_range=1024 65535
- 网卡多队列(RSS 优化):
ethtool -L eth0 combined 8 # 启用 8 个队列
- TCP 拥塞控制算法(高带宽场景):
sysctl net.ipv4.tcp_congestion_control=bbr
- 内核参数调整(
三、高级调优场景
1. 数据库服务器优化(如 MySQL)
- InnoDB 配置:
innodb_flush_log_at_trx_commit=2 # 平衡持久性与性能 innodb_buffer_pool_size=物理内存的 70% innodb_io_capacity=2000 # 适配 SSD 性能
- 文件系统挂载:
mount -o nobarrier,noatime /dev/sdb1 /var/lib/mysql
2. 容器化环境优化(Docker/K8s)
- CPU 限制策略:
docker run --cpus=2 --cpu-shares=512 nginx # 限制容器使用 2 核
- 内存限制:
docker run --memory=4g --memory-swap=4g nginx # 禁用 swap
3. 内核参数深度调优
- 调整文件句柄数:
sysctl fs.file-max=1000000 ulimit -n 100000 # 修改用户级限制
- 调整 PID 数量:
sysctl kernel.pid_max=65535
四、调优原则
- 监控先行:使用
Prometheus + Grafana
建立基线指标。 - 逐步调整:每次只修改一个参数并观察效果。
- 备份配置:关键文件(如
sysctl.conf
)修改前做好备份。 - 硬件匹配:优先解决硬件瓶颈(如更换 NVMe SSD)。
五、调优效果验证
- 磁盘 I/O:
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based
- 网络吞吐:
iperf3 -c <server_ip> -t 30 -P 8
通过系统化的分析、分阶段调优和持续监控,可显著提升 Linux 系统的性能和稳定性。