当前位置:首页>Linux>Linux 服务性能优化与调优实战:CPU、内存、磁盘、网络全栈优化

Linux 服务性能优化与调优实战:CPU、内存、磁盘、网络全栈优化

  • 2026-10-11 05:45:53
Linux 服务性能优化与调优实战:CPU、内存、磁盘、网络全栈优化

Linux 服务性能优化与调优实战:CPU、内存、磁盘、网络全栈优化

一、性能诊断方法论与黄金指标

USE 方法(Utilization、Saturation、Errors):

  • Utilization:资源利用率(CPU 80% 以上为高)
  • Saturation:资源饱和度(等待队列长度)
  • Errors:错误数(磁盘错误、TCP 重传等)

RED 方法(适用于服务):

  • Rate(请求速率)
  • Errors(错误率)
  • Duration(响应时长)

核心诊断工具链:

# 基础工具
top/htop、iotop、iftop、ss、netstat

# 进阶工具
sar(sysstat)、perf、ftrace、bcc(eBPF)、flamegraph

# 监控集成
Prometheus + node_exporter + Grafana

系统负载查看:

uptime
cat /proc/loadavg
vmstat 1 10
iostat -x 1

二、CPU 性能优化实战

1. CPU 诊断命令

top -c -o %CPU          # 按 CPU 使用排序
mpstat -P ALL 1         # 每核 CPU 使用率
pidstat -u 1            # 进程 CPU 统计
perf top                # 实时采样

2. CPU 亲和性与调度优化 在 Systemd 服务中绑定 CPU:

[Service]
AllowedCPUs=0-7,16-23          # 绑定到特定核
CPUQuota=300%                  # 限制 3 核
CPUShares=2048                 # 提高优先级

3. 内核参数调优(/etc/sysctl.conf)

kernel.sched_autogroup_enabled=1
kernel.sched_migration_cost_ns=5000000
vm.stat_interval=10

4. 中断亲和性优化(IRQ Balance)

systemctl enable --now irqbalance
# 或手动绑定
echo"1" > /proc/irq/XX/smp_affinity_list

生产案例:Nginx 高并发时,使用 taskset 或 Systemd AllowedCPUs 将 worker 进程绑定到不同 NUMA 节点,降低跨 NUMA 访问延迟。

三、内存优化与 OOM 防控

1. 内存诊断

free -h
cat /proc/meminfo
vmstat 1
sar -r 1

关键指标:

  • MemAvailable:可用内存
  • Buffers + Cached:可回收缓存
  • AnonPages:匿名页(进程使用)

2. Systemd 内存控制

[Service]
MemoryMax=8G
MemoryHigh=6G
MemorySwapMax=2G
OOMPolicy=continue             # 推荐重要服务
OOMScoreAdjust=-200            # 降低被 Kill 优先级

3. 内核内存参数

vm.swappiness=10               # 降低 Swap 使用倾向
vm.vfs_cache_pressure=50       # 倾向回收目录缓存
vm.overcommit_memory=1         # 允许适度 overcommit
vm.dirty_ratio=5
vm.dirty_background_ratio=2

4. 内存泄漏排查

valgrind --tool=memcheck ./app
# 或使用 heaptrack、perf mem

生产技巧:对 Java 服务调整 -Xmx 与容器内存限制保持一致;对 Redis 设置 maxmemory 并配置淘汰策略(allkeys-lru)。

四、磁盘与 IO 优化

1. IO 诊断

iotop -o
iostat -x 1 10
fio --name=test --filename=/dev/nvme0n1 --rw=randrw --bs=4k --numjobs=4

2. IO Scheduler 选择

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

# 设置为多队列(mq-deadline 或 none)
echo"none" > /sys/block/nvme0n1/queue/scheduler

3. 文件系统优化(ext4 / xfs)

# 挂载参数
mount -o noatime,nodiratime,barrier=0 /dev/nvme0n1 /data

# XFS 推荐
mkfs.xfs -f -i size=512 /dev/nvme0n1

4. Systemd IO 控制

[Service]
IOWeight=900                   # 数据库提高权重
IOReadBandwidthMax=/dev/nvme0n1 200M
IOWriteBandwidthMax=/dev/nvme0n1 150M

生产建议:数据库使用独立 NVMe 盘 + RAID10;日志分区使用 HDD + 单独 Slice 低 IOWeight,避免影响业务 IO。

五、网络性能优化

1. 网络诊断

ss -s
netstat -s | grep -i retrans
sar -n DEV 1
tcpdump -i eth0 -c 100 port 80

2. 核心 sysctl 网络参数

net.core.somaxconn=65535
net.core.netdev_max_backlog=5000
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.ip_local_port_range=1024 65535

3. NIC 优化(多队列、RSS)

ethtool -L eth0 combined 8
ethtool -C eth0 rx-usecs 50

4. HAProxy / Nginx 网络调优

  • backlog、reuseport
  • tcp_nodelay on

生产案例:高并发 API 服务通过增大 somaxconn + tcp_max_syn_backlog + Nginx worker_connections,将 QPS 从 8000 提升至 25000+。

六、综合性能工具与火焰图

1. perf + FlameGraph

perf record -F 99 -p $(pgrep nginx) -g -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > nginx.svg

2. eBPF 工具(bcc)

# 安装 bcc-tools
execsnoop
biolatency
biosnoop

3. Grafana + Prometheus 全栈监控

  • CPU:node_cpu_seconds_total
  • 内存:node_memory_MemAvailable_bytes
  • IO:node_disk_io_time_seconds_total
  • 网络:node_network_receive_bytes_total

七、生产环境性能优化最佳实践

  1. 分层优化顺序:

    • 应用代码 → 数据库查询 → 缓存 → 系统内核 → 硬件
  2. 基线与压测:

    • 使用 wrk、ab、JMeter 建立性能基线
    • 每次优化后重新压测验证
  3. 自动化调优:

    • Ansible 统一 sysctl 配置
    • Systemd Drop-in 集中资源控制
  4. 定期 Review:

    • 每周分析 Top 慢查询 / 高 CPU 函数
    • 季度硬件升级评估
  5. 安全与性能平衡:

    • 开启 SELinux 后监控性能影响
    • 合理使用 HugePages(数据库场景)

八、常见性能瓶颈排查案例

案例1:CPU 上下文切换过高 症状:cs 值极高,负载高但 CPU 使用率不高。 解决:减少线程数、使用线程池、优化锁争用。

案例2:内存缓存命中率低 解决:增大 innodb_buffer_pool_size 或调整 vm.vfs_cache_pressure。

案例3:磁盘 util 100% 解决:更换 SSD、使用 RAID 10、分离日志与数据盘、优化 IO Scheduler。

案例4:TCP 重传率高 解决:检查 MTU、网卡驱动、增加 backlog、优化 keepalive。

案例5:服务启动后逐渐变慢 解决:内存泄漏(监控 resident memory)、连接池耗尽、日志刷盘过频。

最新文章

随机文章