性能调优 #

一、性能调优基础 #

1.1 性能指标 #

资源 关键指标 工具
CPU 使用率、负载、上下文切换 top, mpstat, vmstat
内存 使用率、缓存、交换 free, vmstat, sar
磁盘 IOPS、吞吐量、延迟 iostat, iotop, fio
网络 带宽、延迟、丢包 iftop, nethogs, iperf

1.2 性能调优流程 #

text
发现问题 → 定位瓶颈 → 分析原因 → 优化配置 → 验证效果

二、CPU 调优 #

2.1 CPU 性能分析 #

bash
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo

# 查看负载
uptime
cat /proc/loadavg

# 实时监控
top
htop
mpstat -P ALL 1

# 查看进程 CPU 使用
ps aux --sort=-%cpu | head -10

# 查看线程 CPU 使用
top -H -p PID

2.2 进程优先级 #

bash
# 以指定优先级启动
nice -n -20 ./high_priority_app
nice -n 19 ./low_priority_app

# 修改运行中进程优先级
renice -n -10 -p PID

# 查看进程优先级
ps -eo pid,ni,comm

# CPU 亲和性
taskset -c 0,1 ./app
taskset -p 0x3 PID

2.3 CPU 调度器 #

bash
# 查看调度器
cat /sys/block/sda/queue/scheduler

# 修改调度器
echo noop > /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler
echo cfq > /sys/block/sda/queue/scheduler

# 永久修改
sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX="elevator=deadline"
sudo update-grub

2.4 CPU 频率调节 #

bash
# 查看频率
cat /proc/cpuinfo | grep MHz

# 查看频率调节器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 可用调节器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

# 设置调节器
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 安装 cpufrequtils
sudo apt install cpufrequtils

# 设置性能模式
sudo cpufreq-set -g performance

三、内存调优 #

3.1 内存性能分析 #

bash
# 查看内存使用
free -h
cat /proc/meminfo

# 详细内存统计
vmstat -s

# 内存使用排行
ps aux --sort=-%mem | head -10

# 查看进程内存映射
pmap -x PID

# 查看共享内存
ipcs -m

3.2 内存参数调优 #

bash
# 查看当前参数
sysctl vm.swappiness
sysctl vm.vfs_cache_pressure
sysctl vm.dirty_ratio

# 调整 swappiness(0-100,越小越少使用交换)
sudo sysctl vm.swappiness=10

# 调整缓存压力
sudo sysctl vm.vfs_cache_pressure=50

# 调整脏页比例
sudo sysctl vm.dirty_ratio=10
sudo sysctl vm.dirty_background_ratio=5

# 永久生效
sudo vim /etc/sysctl.conf
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

sudo sysctl -p

3.3 大页内存 #

bash
# 查看大页信息
cat /proc/meminfo | grep Huge

# 设置大页数量
sudo sysctl -w vm.nr_hugepages=1024

# 永久设置
sudo vim /etc/sysctl.conf
vm.nr_hugepages = 1024

# 查看大页使用
cat /proc/meminfo | grep HugePages

3.4 内存限制 #

bash
# 限制进程内存
ulimit -v 1048576    # 限制为 1GB

# 使用 cgroups 限制
sudo mkdir /sys/fs/cgroup/memory/mygroup
echo 1G > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
echo PID > /sys/fs/cgroup/memory/mygroup/cgroup.procs

四、磁盘 I/O 调优 #

4.1 磁盘性能分析 #

bash
# 查看 I/O 统计
iostat -x 1

# 查看进程 I/O
iotop

# 查看块设备
lsblk
fdisk -l

# 查看磁盘队列
cat /sys/block/sda/queue/nr_requests

# 测试磁盘性能
sudo apt install fio

# 顺序读写测试
sudo fio --name=seqread --rw=read --bs=1M --size=1G --numjobs=1 --filename=/tmp/test

# 随机读写测试
sudo fio --name=randread --rw=randread --bs=4K --size=1G --numjobs=1 --filename=/tmp/test

4.2 I/O 调度器调优 #

bash
# 查看调度器
cat /sys/block/sda/queue/scheduler

# 调度器类型
# noop    - 无调度,适合 SSD
# deadline - 截止时间调度,适合数据库
# cfq     - 完全公平队列,适合桌面

# 修改调度器
echo deadline > /sys/block/sda/queue/scheduler

# SSD 优化
echo noop > /sys/block/sda/queue/scheduler
echo 0 > /sys/block/sda/queue/rotational

# 永久修改
sudo vim /etc/udev/rules.d/60-scheduler.rules
ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="deadline"

4.3 文件系统调优 #

bash
# 查看文件系统
df -T
mount | grep "^/dev"

# ext4 调优
sudo tune2fs -o journal_data_writeback /dev/sda1

# 挂载选项优化
# noatime - 不更新访问时间
# nodiratime - 不更新目录访问时间
# data=writeback - 写回模式

sudo mount -o remount,noatime,nodiratime /

# 永久设置
sudo vim /etc/fstab
/dev/sda1  /  ext4  defaults,noatime,nodiratime  0  1

4.4 RAID 优化 #

bash
# 查看 RAID 状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# 调整 RAID 参数
sudo echo 256 > /sys/block/md0/md/stripe_cache_size

# 调整读取策略
sudo echo 0 > /sys/block/md0/md/raid1/read_balance

# 重建速度
sudo echo 50000 > /sys/block/md0/md/sync_speed_max

五、网络调优 #

5.1 网络性能分析 #

bash
# 查看网络统计
ip -s link show eth0

# 查看网络连接
ss -s
netstat -s

# 查看网络错误
cat /proc/net/dev

# 网络性能测试
iperf3 -s
iperf3 -c server_ip

5.2 TCP 参数调优 #

bash
# 查看当前参数
sysctl -a | grep net.ipv4

# 常用 TCP 参数
# 增加端口范围
sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"

# 增加连接队列
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535

# 快速回收 TIME_WAIT
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_fin_timeout=30

# TCP 缓冲区
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# 永久设置
sudo vim /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

sudo sysctl -p

5.3 网卡优化 #

bash
# 查看网卡参数
ethtool eth0

# 查看统计信息
ethtool -S eth0

# 调整 Ring Buffer
sudo ethtool -G eth0 rx 4096 tx 4096

# 调整中断合并
sudo ethtool -C eth0 rx-usecs 50 tx-usecs 50

# 启用 GRO/LRO
sudo ethtool -K eth0 gro on
sudo ethtool -K eth0 lro on

# 多队列优化
sudo ethtool -L eth0 combined 4

5.4 BBR 拥塞控制 #

bash
# 查看当前拥塞控制算法
sysctl net.ipv4.tcp_congestion_control

# 启用 BBR
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee -a /etc/modules-load.d/modules.conf

sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 永久设置
sudo vim /etc/sysctl.conf
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

sudo sysctl -p

六、内核调优 #

6.1 内核参数优化 #

bash
# 查看所有参数
sysctl -a

# 文件描述符限制
sudo sysctl -w fs.file-max=1000000

# 进程数限制
sudo sysctl -w kernel.pid_max=4194303

# 共享内存
sudo sysctl -w kernel.shmmax=68719476736
sudo sysctl -w kernel.shmall=4294967296

# 永久设置
sudo vim /etc/sysctl.conf
fs.file-max = 1000000
kernel.pid_max = 4194303
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

sudo sysctl -p

6.2 用户限制 #

bash
# 查看限制
ulimit -a

# 临时修改
ulimit -n 65535
ulimit -u 4096

# 永久修改
sudo vim /etc/security/limits.conf
*    soft    nofile    65535
*    hard    nofile    65535
*    soft    nproc     4096
*    hard    nproc     4096
root    soft    nofile    65535
root    hard    nofile    65535

# systemd 服务限制
sudo vim /etc/systemd/system/myapp.service
[Service]
LimitNOFILE=65535
LimitNPROC=4096

七、应用优化 #

7.1 Web 服务器优化 #

Nginx 优化:

nginx
# /etc/nginx/nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}

http {
    keepalive_timeout 65;
    keepalive_requests 100;
    
    open_file_cache max=10000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    
    gzip on;
    gzip_min_length 1k;
    gzip_types text/plain application/json;
}

7.2 数据库优化 #

MySQL 优化:

ini
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

max_connections = 1000
query_cache_size = 0
query_cache_type = 0

tmp_table_size = 64M
max_heap_table_size = 64M

7.3 JVM 优化 #

bash
# JVM 参数
java -Xms4g -Xmx4g \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -XX:ParallelGCThreads=4 \
     -XX:ConcGCThreads=2 \
     -XX:+HeapDumpOnOutOfMemoryError \
     -jar app.jar

八、性能测试工具 #

8.1 压力测试 #

bash
# CPU 压力测试
sudo apt install stress
stress --cpu 4 --timeout 60

# 内存压力测试
stress --vm 4 --vm-bytes 512M --timeout 60

# I/O 压力测试
stress --io 4 --timeout 60

# 综合压力测试
stress --cpu 4 --io 4 --vm 4 --vm-bytes 512M --timeout 60

8.2 基准测试 #

bash
# CPU 基准测试
sysbench cpu --cpu-max-prime=20000 run

# 内存基准测试
sysbench memory --memory-block-size=1K --memory-total-size=10G run

# 磁盘基准测试
sysbench fileio --file-total-size=1G prepare
sysbench fileio --file-total-size=1G --file-test-mode=rndrd run
sysbench fileio --file-total-size=1G cleanup

# 网络基准测试
iperf3 -c server_ip -P 10 -t 60

九、实践练习 #

9.1 练习一:CPU 调优 #

bash
# 1. 查看 CPU 信息
lscpu

# 2. 查看负载
uptime

# 3. 监控 CPU
mpstat -P ALL 1

# 4. 调整进程优先级
renice -n -10 -p PID

9.2 练习二:内存调优 #

bash
# 1. 查看内存使用
free -h

# 2. 调整 swappiness
sudo sysctl vm.swappiness=10

# 3. 查看效果
cat /proc/sys/vm/swappiness

# 4. 永久设置
echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf

9.3 练习三:网络调优 #

bash
# 1. 查看 TCP 参数
sysctl net.ipv4.tcp_congestion_control

# 2. 启用 BBR
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 3. 测试网络性能
iperf3 -c server_ip

# 4. 永久设置
echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.conf

十、小结 #

本章学习了 Linux 系统性能调优的核心技术,包括 CPU、内存、磁盘、网络等资源的优化。

关键要点:

  1. 性能调优遵循发现问题→定位瓶颈→分析原因→优化配置→验证效果的流程
  2. CPU 调优关注优先级、调度器和频率
  3. 内存调优关注缓存、交换和大页
  4. 磁盘调优关注 I/O 调度器和文件系统
  5. 网络调优关注 TCP 参数和拥塞控制

下一章预告: 系统服务 - 学习 systemd 服务管理和配置。

最后更新:2026-03-27