作为IT工程师,掌握Linux系统性能分析和调优是必备技能。以下是一个系统性的方法指南:
top/htop:实时监控系统资源使用情况
top
htop # 更友好的交互式界面
vmstat:虚拟内存统计
vmstat 1 # 每秒刷新一次
dstat:全能系统资源统计工具
dstat -cdlmnpsy
mpstat:多核CPU使用统计
mpstat -P ALL 1
pidstat:进程级CPU使用统计
pidstat -u 1
perf:性能计数器分析
perf top
perf stat -a
perf record -a -g
free:内存使用情况
free -h
pmap:进程内存映射
pmap -x [PID]
slabtop:内核slab缓存信息
slabtop
iostat:磁盘I/O统计
iostat -x 1
iotop:类似top的I/O监控工具
iotop
blktrace:块设备I/O追踪
blktrace -d /dev/sda -o trace
netstat/ss:网络连接统计
netstat -tulnp
ss -tulnp # 更快的替代品
iftop:实时网络带宽监控
iftop
tcpdump:网络包捕获
tcpdump -i eth0 -n
调整进程优先级:使用nice/renice
nice -n 10 command
renice 10 -p [PID]
CPU亲和性:taskset绑定CPU核心
taskset -c 0,1 command
内核调度参数:
sysctl -w kernel.sched_min_granularity_ns=10000000
调整swappiness:
sysctl -w vm.swappiness=10
透明大页(THP):
echo never > /sys/kernel/mm/transparent_hugepage/enabled
OOM killer调整:
echo -17 > /proc/[PID]/oom_adj
I/O调度器选择:
echo deadline > /sys/block/sda/queue/scheduler
文件系统参数:
mount -o remount,noatime,nodiratime /
调整预读值:
blockdev --setra 1024 /dev/sda
TCP参数优化:
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.core.somaxconn=4096
网卡队列调整:
ethtool -L eth0 combined 8
USE方法(Utilization, Saturation, Errors):
RED方法(Rate, Errors, Duration):
性能基准测试:
# CPU测试
sysbench cpu --cpu-max-prime=20000 run
# 内存测试
sysbench memory --memory-block-size=1K --memory-total-size=10G run
# 磁盘I/O测试
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based
eBPF工具集:
bpftrace -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }'
SystemTap:动态追踪工具
stap -e 'probe vfs.read {printf("read performed\n"); exit()}'
FlameGraph:可视化性能分析
perf record -F 99 -a -g -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > perf.svg
通过系统化的分析和有针对性的调优,可以显著提升Linux系统的性能表现。