Linux性能调优进阶
Linux性能调优进阶
性能分析方法论
USE方法
- Utilization:资源使用率
- Saturation:饱和度
- Errors:错误数
RED方法
- Rate:请求速率
- Errors:错误率
- Duration:请求耗时
CPU调优
CPU亲和性
# 查看CPU核心
lscpu
# 绑定进程到CPU
taskset -c 0,1 command
# 使用isolcpus内核参数
# 在GRUB中添加: isolcpus=2,3
进程优先级
# 查看nice值
ps -el | grep nginx
# 设置nice值
nice -n -10 command
renice -10 PID
中断优化
# 查看中断分布
cat /proc/interrupts
# 绑定网卡中断到CPU
echo 2 > /proc/irq/32/smp_affinity
内存调优
内核参数
# 查看内存参数
sysctl vm.swappiness
sysctl vm.dirty_ratio
# 优化内存使用
sysctl -w vm.swappiness=10
sysctl -w vm.dirty_ratio=30
sysctl -w vm.dirty_background_ratio=5
大页内存
# 启用透明大页
echo always > /sys/kernel/mm/transparent_hugepage/enabled
# 预分配大页
sysctl -w vm.nr_hugepages=1024
内存锁定
# 锁定进程内存
mlock command
# 在程序中使用
mlockall(MCL_CURRENT | MCL_FUTURE);
磁盘IO调优
IO调度器
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 设置调度器
echo deadline > /sys/block/sda/queue/scheduler
文件系统优化
# ext4优化挂载选项
mount -o noatime,nodiratime,data=writeback /dev/sda1 /data
# 使用SSD优化
mount -o discard,noatime /dev/nvme0n1 /data
预读设置
# 查看预读值
blockdev --getra /dev/sda
# 设置预读值(KB)
blockdev --setra 4096 /dev/sda
网络调优
TCP优化
# 增加连接队列
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 启用TCP重用
sysctl -w net.ipv4.tcp_tw_reuse=1
# 调整端口范围
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# 启用TCP Fast Open
sysctl -w net.ipv4.tcp_fastopen=3
网卡优化
# 查看网卡信息
ethtool eth0
# 增加环形缓冲区
ethtool -G eth0 rx 4096 tx 4096
# 启用多队列
ethtool -L eth0 combined 8
实践:性能调优脚本
#!/bin/bash
echo "=== 性能调优 ==="
# 1. CPU优化
echo "优化CPU..."
sysctl -w kernel.sched_migration_cost_ns=5000000
# 2. 内存优化
echo "优化内存..."
sysctl -w vm.swappiness=10
sysctl -w vm.dirty_ratio=30
sysctl -w vm.dirty_background_ratio=5
# 3. 网络优化
echo "优化网络..."
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# 4. 文件描述符
echo "优化文件描述符..."
ulimit -n 65535
echo "调优完成!"
性能分析工具
# CPU分析
perf top
perf record -p PID
perf report
# 内存分析
valgrind --tool=memcheck program
pmap -x PID
# IO分析
blktrace -d /dev/sda -o trace
btt -i trace.blktrace.0
# 网络分析
tcpdump -i eth0 -w capture.pcap
wireshark capture.pcap
总结
Linux性能调优需要系统性地分析和优化各个子系统。通过使用专业的分析工具和合理的调优参数,可以显著提升系统性能。