Linux 系统性能调优:从内核到应用的全方位优化
Linux 系统性能调优是一个复杂的主题,涉及从内核参数到应用程序的多个层面。本文系统介绍 Linux 系统性能优化的方法论和实践技巧,帮助您充分发挥服务器性能。
一、性能分析工具
1. 系统整体监控
# top - 实时进程监控 top -H # 显示线程模式 # htop - 更友好的交互式监控 htop # vmstat - 系统资源统计 vmstat 1 5 # 每秒采样,共 5 次 # iostat - IO 统计 iostat -x 1 5 # 显示详细 IO 信息 # sar - 历史数据统计 sar -u 1 5 # CPU 使用率 sar -r 1 5 # 内存使用 sar -d 1 5 # 磁盘 IO
2. 进程级分析
# pidstat - 进程级统计 pidstat -p 1234 1 5 # 监控 PID 1234 # strace - 系统调用跟踪 strace -p 1234 # 跟踪进程 1234 的系统调用 strace -f ./myapp # 跟踪新进程 # ltrace - 库函数跟踪 ltrace -p 1234 # perf - 性能分析 perf top # 实时性能分析 perf record -g -p 1234 # 记录性能数据 perf report # 查看报告
二、CPU 性能优化
1. CPU 亲和性绑定
# 将进程绑定到特定 CPU 核心 taskset -c 0,1 ./myapp # 绑定到 CPU 0 和 1 # 查看进程的 CPU 亲和性 taskset -cp 1234 # 使用 numactl 控制 NUMA 节点 numactl --cpunodebind=0 --membind=0 ./myapp
2. 进程优先级调整
# 使用 nice 值调整优先级(-20 最高,19 最低) nice -n 10 ./myapp # 以低优先级运行 # 调整运行中进程的优先级 renice -5 -p 1234 # 提高 PID 1234 的优先级 # 使用 ionice 调整 IO 优先级 ionice -c2 -n7 ./myapp # 设置为尽力而为,最低优先级
3. 中断优化
# 查看中断分布 cat /proc/interrupts # 修改中断亲和性 echo 2 > /proc/irq/24/smp_affinity_list # 将 IRQ 24 绑定到 CPU 2 # 使用 RPS(Receive Packet Steering) echo ffff > /sys/class/net/eth0/queues/rx-0/rps_cpus
三、内存性能优化
1. Swap 优化
# 查看 Swap 使用情况
cat /proc/swaps
free -h
# 调整 swappiness(0-100,越小越不使用 Swap)
cat /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/swappiness # 减少使用 Swap
# 永久配置
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
2. 巨页配置
# 查看 HugePages 状态
cat /proc/meminfo | grep Huge
# 配置 HugePages
echo 128 > /proc/sys/vm/nr_hugepages
# 永久配置
echo "vm.nr_hugepages = 128" >> /etc/sysctl.conf
3. 内存清理
# 清理 Page Cache
sync && echo 1 > /proc/sys/vm/drop_caches
# 清理 dentries 和 inodes
sync && echo 2 > /proc/sys/vm/drop_caches
# 清理所有缓存
sync && echo 3 > /proc/sys/vm/drop_caches
# 注意:生产环境慎用!
四、IO 性能优化
1. IO 调度算法
# 查看当前调度算法
cat /sys/block/sda/queue/scheduler
# 修改为 noop(SSD 推荐)
echo noop > /sys/block/sda/queue/scheduler
# 修改为 deadline(HDD 推荐)
echo deadline > /sys/block/sda/queue/scheduler
2. 文件系统优化
# 挂载参数优化(ext4)
mount -o noatime,nodiratime,data=writeback /dev/sdb1 /data
# /etc/fstab 永久配置
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback 0 2
3. IO 隔离(cgroups)
# 创建 cgroup
mkdir -p /sys/fs/cgroup/blkio/myapp
echo 1234 > /sys/fs/cgroup/blkio/myapp/tasks
# 限制 IO 速率
echo "8:0 1048576" > /sys/fs/cgroup/blkio/myapp/blkio.throttle.read_bps_device
echo "8:0 1048576" > /sys/fs/cgroup/blkio/myapp/blkio.throttle.write_bps_device
五、网络性能优化
1. 内核参数调优
# 编辑 /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
# 应用配置
sysctl -p
2. 网络接口优化
# 启用 TCP Fast Open
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
# 启用 BBR 拥塞控制
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf
# 启用 TCP Window Scaling
echo net.ipv4.tcp_window_scaling=1 >> /etc/sysctl.conf
3. 网卡多队列
# 设置网卡多队列
ethtool -L eth0 combined 8 # 8 个队列
# 配置 RSS(Receive Side Scaling)
ethtool -X eth0 rxfh indirection 0:1:2:3:4:5:6:7
六、应用程序优化
1. 数据库优化
# MySQL 配置优化
[mysqld]
innodb_buffer_pool_size = 4G # 设置为物理内存的 50%-70%
innodb_log_file_size = 256M
max_connections = 1000
query_cache_size = 64M
2. Redis 优化
# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru
save "" # 关闭 RDB 持久化(如果不需要)
appendonly yes # 启用 AOF
3. Nginx 优化
# nginx.conf
worker_processes auto;
worker_connections 10240;
keepalive_timeout 65;
gzip on;
七、性能监控与告警
# 使用 Prometheus + Grafana
docker run -d --name prometheus -p 9090:9090 prom/prometheus
docker run -d --name grafana -p 3000:3000 grafana/grafana
# 使用 Zabbix
sudo apt install zabbix-server-mysql zabbix-agent
# 配置告警规则
# 在 Zabbix Web 界面配置触发器和告警动作
总结
Linux 系统性能调优是一个循序渐进的过程。首先要学会使用各种性能分析工具找出瓶颈,然后针对性地优化 CPU、内存、IO、网络等子系统。记住:没有银弹,所有优化都要基于实际测量,而非盲目调优。
