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.pcapCPU性能调优
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/sda1I/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_网络管理