Linux 系统性能调优:从内核到应用的全方位优化


阿里云特惠 - 新用户专享

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、网络等子系统。记住:没有银弹,所有优化都要基于实际测量,而非盲目调优。

发表评论