Linux系统性能调优指南

· 阅读约需14分钟

一、性能调优概述

Linux系统性能调优是一个系统性工程,涉及CPU、内存、磁盘I/O、网络等多个子系统。通过合理的调优,可以显著提升系统的响应速度、吞吐量和稳定性。

性能调优的核心目标:

  • 提升吞吐量:单位时间内处理更多请求
  • 降低延迟:减少请求响应时间
  • 提高稳定性:避免系统在高负载下崩溃
  • 优化资源利用率:充分利用硬件资源

二、CPU性能调优

1. 查看CPU信息

# 查看CPU详细信息
cat /proc/cpuinfo

# 查看CPU使用率
top
htop

# 查看每个CPU核心的使用率
mpstat -P ALL 1

2. CPU调度策略优化

# 查看当前调度策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 设置为性能模式(适合服务器)
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 设置为节能模式(适合桌面)
echo powersave | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

3. 进程优先级调整

# 启动时指定优先级(-20最高,19最低)
nice -n -10 ./your_program

# 调整已运行进程的优先级
renice -10 -p 
<PID>

4. CPU亲和性设置

# 将进程绑定到特定CPU核心
taskset -c 0,1,2,3 -p 
<PID>

# 启动时绑定CPU核心
taskset -c 0-3 ./your_program

三、内存性能调优

1. 内存使用情况监控

# 查看内存使用情况
free -h

# 详细内存统计
cat /proc/meminfo

# 查看进程内存使用
ps aux --sort=-%mem

2. Swappiness调整

# 查看当前swappiness值
cat /proc/sys/vm/swappiness

# 临时设置(值越小,越倾向使用物理内存)
sysctl vm.swappiness=10

# 永久设置(编辑/etc/sysctl.conf)
vm.swappiness=10

3. 内存缓存优化

# 调整脏页写入磁盘的阈值
sysctl vm.dirty_ratio=10
sysctl vm.dirty_background_ratio=5

# 调整页面缓存压力
sysctl vm.vfs_cache_pressure=50

4. 大页内存配置

# 查看大页配置
cat /proc/meminfo | grep Huge

# 临时配置大页
sysctl vm.nr_hugepages=1024

# 永久配置(/etc/sysctl.conf)
vm.nr_hugepages=1024

四、磁盘I/O性能调优

1. 磁盘I/O监控

# 查看磁盘I/O统计
iostat -x 1

# 查看进程I/O使用
iotop

# 查看磁盘使用情况
df -h
du -sh /*

2. I/O调度器优化

# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 设置为deadline(适合SSD和数据库)
echo deadline > /sys/block/sda/queue/scheduler

# 设置为noop(适合虚拟机)
echo noop > /sys/block/sda/queue/scheduler

# 设置为cfq(适合桌面多任务)
echo cfq > /sys/block/sda/queue/scheduler

3. 文件系统优化

# 使用noatime挂载选项(减少磁盘写入)
# /etc/fstab示例:
/dev/sda1 / ext4 defaults,noatime 0 1

# 调整文件系统日志模式
mount -o remount,data=writeback /

4. 磁盘队列深度调整

# 查看当前队列深度
cat /sys/block/sda/queue/nr_requests

# 增加队列深度
echo 1024 > /sys/block/sda/queue/nr_requests

五、网络性能调优

1. 网络状态监控

# 查看网络连接
netstat -tulnp
ss -tulnp

# 查看网络统计
ifconfig
ip -s link

# 实时网络流量
iftop
nload

2. TCP参数优化

# 编辑/etc/sysctl.conf
# 增加TCP连接队列
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000

# TCP缓冲区优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# TCP连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

# 启用TCP BBR拥塞控制
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

3. 应用配置生效

# 使配置生效
sysctl -p

六、文件描述符优化

1. 查看当前限制

# 查看系统级限制
cat /proc/sys/fs/file-max

# 查看用户级限制
ulimit -n

# 查看进程限制
cat /proc/
<PID>/limits | grep "open files"

2. 系统级配置

# /etc/sysctl.conf
fs.file-max = 1000000

3. 用户级配置

# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535

4. 服务配置(systemd)

# 在.service文件中添加
[Service]
LimitNOFILE=65535
LimitNPROC=65535

七、常用性能监控工具汇总

工具用途安装命令
top综合系统监控系统自带
htop增强版topapt install htop
iostat磁盘I/O监控apt install sysstat
vmstat虚拟内存统计apt install procps
mpstatCPU统计apt install sysstat
netstat网络连接apt install net-tools
ss现代网络统计iproute2
iotop进程I/O监控apt install iotop
iftop网络流量apt install iftop
nload网络负载apt install nload
sar系统活动报告apt install sysstat

八、调优最佳实践

1. 调优原则

  1. 先监控后调优:准确找到性能瓶颈再优化
  2. 循序渐进:一次只调整一个参数,观察效果
  3. 基准测试:调优前后进行性能对比
  4. 文档记录:记录所有修改,便于回滚

2. 常见误区

  • ❌ 盲目调整参数,不理解原理
  • ❌ 一次修改多个参数,无法定位效果
  • ❌ 不做基准测试,无法量化优化效果
  • ❌ 忽略业务场景,照搬通用配置

3. 生产环境建议

  1. 先在测试环境验证调优效果
  2. 制定回滚方案
  3. 监控调优后的系统稳定性
  4. 定期复查和调整参数

总结

Linux性能调优需要结合具体的业务场景和硬件环境,没有万能的配置方案。通过系统的监控、分析和逐步优化,可以让系统发挥出最佳性能。

建议按照以下流程进行调优:

  1. 建立性能基准线
  2. 识别性能瓶颈
  3. 针对性调整参数
  4. 验证优化效果
  5. 持续监控和迭代