Linux系统性能调优

一、引言

运维工作中,性能调优是最常遇到也最能体现技术水平的工作之一。一个配置不当的系统,可能在并发量上来后直接崩溃。本文从CPU、内存、磁盘、网络四个维度,结合实际案例讲解Linux系统性能调优方法。

二、CPU性能调优

2.1 查看CPU瓶颈

# 查看CPU负载
top -bn1 | head -5
# 查看CPU上下文切换
vmstat 1 5
# 查看进程CPU占用详情
pidstat -u 1 5
# 查看中断分布
cat /proc/interrupts | head -20

2.2 CPU调优策略

场景一:大量上下文切换。如果vmstat显示的cs(context switch)值过高(大于10万/秒),说明系统在做大量无用的调度。可以调整进程的nice值和调度策略:

# 调整进程优先级(-20最高,19最低)
renice -n -10 -p $(pgrep nginx)
# 设置CPU亲和性(绑定到指定核心)
taskset -c 0,1 $(pgrep -f "java.*app")

场景二:CPU软中断过高。如果top中si(softirq)持续偏高,通常是网卡中断处理不过来:

# 启用RPS(Receive Packet Steering)分散中断
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
# 调整网络预算,提高软中断处理效率
echo 300 > /sys/class/net/eth0/gro_flush_timeout

三、内存性能调优

3.1 内存使用分析

# 查看内存使用
free -h
# 查看内存详细使用
cat /proc/meminfo
# 查看进程内存占用
smem -r -s rss | head -10
# 查看内存页错误
sar -B 1 5

3.2 内存调优策略

# 调整swappiness(减少swap使用)
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p
# 调整内存分配策略
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf   # 允许内存过量分配
echo "vm.dirty_ratio = 30" >> /etc/sysctl.conf         # 脏页比例
echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf
# 大页内存配置(适用于数据库等大内存应用)
echo "vm.nr_hugepages = 1024" >> /etc/sysctl.conf
# 确认HugePages已分配
grep HugePages /proc/meminfo

四、磁盘I/O性能调优

4.1 I/O瓶颈分析

# 查看磁盘I/O
iostat -x 1 5
# 查看进程I/O
iotop
# 查看文件系统缓存
cat /proc/slabinfo | head -10

4.2 I/O调度器优化

# 查看当前I/O调度器
cat /sys/block/sda/queue/scheduler
# SSD推荐使用none(NVMe)或kyber
echo none > /sys/block/nvme0n1/queue/scheduler
# HDD推荐使用mq-deadline
echo mq-deadline > /sys/block/sda/queue/scheduler
# 调整I/O请求合并
echo 0 > /sys/block/sda/queue/nomerges
echo 1024 > /sys/block/sda/queue/read_ahead_kb

4.3 文件系统优化

# 调整文件系统挂载参数
mount -o noatime,nodiratime,data=writeback /dev/sda1 /data
# XFS参数优化(最佳实践,大文件场景)
mkfs.xfs -f -d agcount=8 -l size=128m -n size=8192 /dev/sdb1
# 禁用文件系统访问时间更新
echo "UUID=$(blkid /dev/sda1 | awk '{print $2}') /data xfs defaults,noatime 0 0" >> /etc/fstab

五、网络性能调优

5.1 网络瓶颈分析

# 查看网络流量
sar -n DEV 1 5
# 查看TCP连接状态
ss -s
# 查看重传率
netstat -s | grep retransmit

5.2 网络参数优化

# TCP内核参数调优
cat >> /etc/sysctl.conf <<>

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This website uses cookies to analyze site traffic and improve your experience. By continuing to use this site, you consent to our use of cookies.