性能调优 #
一、性能调优基础 #
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、内存、磁盘、网络等资源的优化。
关键要点:
- 性能调优遵循发现问题→定位瓶颈→分析原因→优化配置→验证效果的流程
- CPU 调优关注优先级、调度器和频率
- 内存调优关注缓存、交换和大页
- 磁盘调优关注 I/O 调度器和文件系统
- 网络调优关注 TCP 参数和拥塞控制
下一章预告: 系统服务 - 学习 systemd 服务管理和配置。
最后更新:2026-03-27