Linux性能优化

性能分析工具

系统整体性能

# 系统负载和运行时间
uptime
 
# 综合系统监控
top                                  # 交互式监控
htop                                 # 增强版监控
glances                              # 全方位监控
dstat                                # 资源统计
 
# 系统活动报告
sar -u 1 10                          # CPU使用情况
sar -r 1 10                          # 内存使用情况
sar -d 1 10                          # 磁盘I/O
sar -n DEV 1 10                      # 网络流量

CPU性能分析

# CPU详细信息
lscpu
cat /proc/cpuinfo
 
# CPU使用率
top -bn1 | head -20
mpstat 1 5                           # 每秒采样,共5次
 
# 进程CPU使用
ps aux --sort=-%cpu | head -10
pidstat -u 1 5                       # 进程CPU统计
 
# CPU性能剖析
perf top                             # 实时函数热点
perf record -g -p PID                # 记录性能数据
perf report                          # 分析报告

内存性能分析

# 内存使用
free -h
cat /proc/meminfo
 
# 内存统计
vmstat 1 10
sar -r 1 10
 
# 进程内存使用
ps aux --sort=-%mem | head -10
smem -t -k -s rss                    # 按RSS排序
 
# 内存映射
pmap -x PID                          # 进程内存映射
 
# 缓存统计
cat /proc/meminfo | grep -E "Cached|Buffers"

磁盘I/O分析

# 磁盘统计
iostat -x 1 10
sar -d 1 10
 
# 磁盘性能测试
hdparm -t /dev/sda
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --filename=/dev/sda
 
# 查找IO密集进程
iotop
pidstat -d 1 5
 
# 查看块设备
lsblk
fdisk -l

网络性能分析

# 网络统计
netstat -i
sar -n DEV 1 10
 
# 网络连接
ss -s
netstat -an | awk '/^tcp/ {print $NF}' | sort | uniq -c
 
# 带宽测试
iperf3 -s                            # 服务端
iperf3 -c 192.168.1.100              # 客户端
 
# 网络延迟
ping -c 10 8.8.8.8
mtr 8.8.8.8
 
# 抓包分析
tcpdump -i eth0 -w capture.pcap

CPU性能调优

CPU调度优化

# 查看当前调度策略
cat /sys/block/sda/queue/scheduler
 
# 设置I/O调度器
echo deadline > /sys/block/sda/queue/scheduler
 
# 常用调度器
# noop     - 无调度,适合SSD
# deadline - 保证延迟,适合数据库
# cfq      - 公平调度,适合桌面

进程优先级

# 查看进程优先级
ps -eo pid,ni,pri,cmd
 
# 启动时设置nice值
nice -n -10 command
 
# 修改运行中进程优先级
renice -n -5 -p PID
 
# CPU亲和性
taskset -c 0-3 command               # 绑定到CPU 0-3
taskset -p 0xf PID                   # 设置亲和性

中断均衡

# 查看中断分布
cat /proc/interrupts
 
# 查看IRQ均衡服务
systemctl status irqbalance
 
# 手动绑定中断到CPU
echo 2 > /proc/irq/45/smp_affinity

内存性能调优

内存参数调优

# 查看当前参数
sysctl -a | grep vm
 
# 调整swappiness(0-100,值越低越少使用swap)
sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf
 
# 脏页比例
sysctl vm.dirty_ratio=20
sysctl vm.dirty_background_ratio=5
 
# 过度内存分配
sysctl vm.overcommit_memory=1
 
# 应用配置
sysctl -p

大页内存

# 查看大页信息
cat /proc/meminfo | grep Huge
 
# 设置大页数量
echo 1024 > /proc/sys/vm/nr_hugepages
 
# 或在sysctl.conf中设置
vm.nr_hugepages=1024

透明大页

# 查看状态
cat /sys/kernel/mm/transparent_hugepage/enabled
 
# 关闭透明大页(数据库建议关闭)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

磁盘I/O优化

文件系统优化

# 挂载选项优化
mount -o noatime,nodiratime /dev/sda1 /data
 
# 在fstab中配置
/dev/sda1  /data  ext4  defaults,noatime,nodiratime  0 0
 
# ext4文件系统调优
tune2fs -o journal_data_writeback /dev/sda1

I/O调度器

# 查看当前调度器
cat /sys/block/sda/queue/scheduler
 
# 设置调度器
echo noop > /sys/block/sda/queue/scheduler    # SSD推荐
echo deadline > /sys/block/sda/queue/scheduler # 数据库推荐
 
# 永久设置(添加到rc.local或udev规则)

RAID优化

# 查看RAID状态
cat /proc/mdstat
mdadm --detail /dev/md0
 
# 调整RAID参数
echo 8192 > /sys/block/md0/queue/read_ahead_kb
 
# RAID重建速度
echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 200000 > /proc/sys/dev/raid/speed_limit_max

网络性能调优

内核网络参数

# TCP参数调优 /etc/sysctl.conf
 
# 最大连接数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
 
# TCP缓冲区
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
 
# TCP连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
 
# TCP Keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
 
# 最大打开文件数
fs.file-max = 2097152
 
# 应用配置
sysctl -p

网卡优化

# 查看网卡参数
ethtool eth0
 
# 查看统计信息
ethtool -S eth0
 
# 调整Ring Buffer
ethtool -g eth0                      # 查看当前设置
ethtool -G eth0 rx 4096 tx 4096      # 设置大小
 
# 中断合并
ethtool -C eth0 rx-usecs 50
 
# 卸载功能
ethtool -K eth0 tso on gso on       # 开启TSO/GSO

应用层优化

系统限制

# 查看当前限制
ulimit -a
 
# 修改限制 /etc/security/limits.conf
*    soft    nofile    65535
*    hard    nofile    65535
*    soft    nproc     65535
*    hard    nproc     65535
 
# systemd服务限制
[Service]
LimitNOFILE=65535
LimitNPROC=65535

进程数和线程数

# 查看系统限制
cat /proc/sys/kernel/pid_max
cat /proc/sys/kernel/threads-max
 
# 调整限制
echo 4194303 > /proc/sys/kernel/pid_max

性能问题排查

系统负载高

# 1. 查看负载
uptime
 
# 2. 找出CPU密集进程
top -P
ps aux --sort=-%cpu | head
 
# 3. 分析系统调用
strace -p PID
perf top
 
# 4. 检查是否有僵尸进程
ps aux | grep -w Z

内存不足

# 1. 查看内存使用
free -h
cat /proc/meminfo
 
# 2. 找出内存占用进程
ps aux --sort=-%mem | head
smem -t -k -s rss
 
# 3. 检查内存泄漏
valgrind --leak-check=full ./program
 
# 4. 清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches

磁盘I/O瓶颈

# 1. 查看I/O状态
iostat -x 1
iotop
 
# 2. 查找IO密集进程
pidstat -d 1
 
# 3. 检查磁盘队列
cat /sys/block/sda/queue/nr_requests
 
# 4. 调整调度器
echo deadline > /sys/block/sda/queue/scheduler

网络延迟高

# 1. 检查网络连接
ss -s
netstat -an | grep -E "ESTABLISHED|TIME_WAIT"
 
# 2. 检查网络流量
iftop
nethogs
 
# 3. 检查DNS解析
dig example.com
nslookup example.com
 
# 4. 抓包分析
tcpdump -i eth0 -nn host 192.168.1.1

💡 性能优化建议:

  • 先监控分析,后优化调整
  • 每次只改一个参数,观察效果
  • 保留优化前的基准数据
  • 记录所有优化操作
  • 定期评估优化效果

🔗 相关笔记: 02.07_进程管理 02.05_存储与文件系统 02.04_网络管理