Linux 性能排查指南:从入门到精通
本文系统讲解 Linux 系统性能排查的方法论、工具链和实战技巧,帮助运维和开发人员快速定位和解决性能问题。
一、性能排查方法论 1.1 USE 方法 USE(Utilization, Saturation, Errors) 是 Brendan Gregg 提出的性能分析方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 graph TB A[性能问题] --> B[资源利用率 Utilization] A --> C[资源饱和度 Saturation] A --> D[资源错误 Errors] B --> B1[CPU 使用率] B --> B2[内存使用率] B --> B3[磁盘使用率] B --> B4[网络带宽] C --> C1[CPU 队列长度] C --> C2[内存交换] C --> C3[磁盘 IO 队列] C --> C4[网络丢包] D --> D1[硬件错误] D --> D2[系统错误] D --> D3[应用错误]
检查清单:
资源
利用率
饱和度
错误
CPU
% 使用率
运行队列长度
硬件错误
内存
% 使用率
Swap 使用
OOM 错误
磁盘
% 容量
IO 等待时间
IO 错误
网络
带宽使用
丢包/重传
连接错误
1.2 性能分析步骤 1 2 3 4 5 6 7 8 9 10 graph LR A[发现问题] --> B[收集指标] B --> C[定位瓶颈] C --> D[分析原因] D --> E[制定方案] E --> F[验证效果] style A fill:#ff6b6b style C fill:#ffe66d style F fill:#4ecdc4
标准流程:
发现问题 :监控告警、用户反馈、日志异常
收集指标 :使用工具收集系统指标
定位瓶颈 :分析指标,找出瓶颈资源
分析原因 :深入分析瓶颈原因
制定方案 :设计优化方案
验证效果 :实施后验证效果
1.3 性能指标阈值
指标
正常
警告
严重
CPU 使用率
< 70%
70-85%
> 85%
内存使用率
< 80%
80-90%
> 90%
Swap 使用率
0%
< 50%
> 50%
磁盘使用率
< 80%
80-90%
> 90%
IO 等待
< 10%
10-30%
> 30%
负载平均值
< CPU 核数
1-2 倍
> 2 倍
网络丢包
0%
< 0.1%
> 0.1%
二、CPU 性能排查 2.1 CPU 指标解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 lscpu cat /proc/cpuinfotop -bn1 | grep "Cpu(s)" mpstat -P ALL 1 5 uptime cat /proc/loadavg
负载平均值含义:
1 2 3 4 5 6 7 8 9 负载 0.00:系统空闲 负载 0.50:系统利用 50% 负载 1.00:系统满载(单核) 负载 2.00:系统过载(单核),有进程等待 负载 4.00:系统严重过载(单核) 多核系统:负载 / CPU 核数 = 实际负载率 4 核系统负载 4.00 = 100% 利用 4 核系统负载 8.00 = 200% 利用(严重过载)
2.2 CPU 排查工具 top 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 top top -bn1 top -p 1234,5678 top -o %CPU top -o %MEM top -d 2 top -H -p 1234
top 输出解读:
1 2 3 4 5 6 7 8 9 top - 14:30:00 up 10 days, 2:30, 1 user, load average: 0.50, 0.80, 0.90 Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie %Cpu(s): 20.0 us, 5.0 sy, 0.0 ni, 75.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 7980.0 total, 2000.0 free, 3000.0 used, 2980.0 buff/cache MiB Swap: 2048.0 total, 2000.0 free, 48.0 used. 4500.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 root 20 0 500000 100000 10000 R 50.0 1.3 10:00.00 java 5678 mysql 20 0 800000 200000 20000 S 20.0 2.5 20:00.00 mysqld
字段说明:
us (user): 用户空间 CPU 使用率
sy (system): 内核空间 CPU 使用率
ni (nice): 低优先级进程 CPU 使用率
id (idle): 空闲 CPU 使用率
wa (iowait): IO 等待 CPU 使用率
hi (hardware interrupts): 硬件中断
si (software interrupts): 软件中断
st (steal): 虚拟机被偷取的时间
htop 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 yum install htop -y apt install htop -y htop htop -p 1234 htop -c java
vmstat 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 vmstat 1 5 vmstat -a 1 5 vmstat -m 1 5 vmstat -d 1 5 vmstat -a -m -d -s -S M 1 5
vmstat 输出解读:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 48000 200000 100000 2980000 0 0 10 20 100 200 20 5 75 0 0 procs: r: 运行队列中的进程数(> CPU 核数表示过载) b: 等待 IO 的进程数 memory: swpd: 使用的虚拟内存(KB) free: 空闲内存(KB) buff: 缓冲区内存(KB) cache: 缓存内存(KB) swap: si: 从磁盘换入的内存(KB/s) so: 换出到磁盘的内存(KB/s) io: bi: 从块设备读取的块数/s bo: 发送到块设备的块数/s system: in: 每秒中断数 cs: 每秒上下文切换数 cpu: us: 用户时间 sy: 系统时间 id: 空闲时间 wa: IO 等待时间 st: 被偷取时间
pidstat 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 yum install sysstat -y apt install sysstat -y pidstat -u 1 5 pidstat -p 1234 1 5 pidstat -t -p 1234 1 5 pidstat -w 1 5 pidstat -u -r -d -w -h -p 1234 1 5
2.3 CPU 问题诊断 场景 1:CPU 使用率高 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 top -bn1 | grep "Cpu(s)" top -o %CPU -bn1 | head -20 top -H -p 1234 strace -c -p 1234 pstack 1234 perf top -p 1234 perf record -p 1234 -g -- sleep 30 perf report
场景 2:负载高但 CPU 使用率低 1 2 3 4 5 6 7 8 9 10 11 vmstat 1 5 iotop -o iostat -x 1 5 ps aux | awk '$8 ~ /D/ {print}'
场景 3:上下文切换频繁 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 vmstat 1 5 pidstat -w 1 5 cat /proc/interruptscat /proc/softirqs
2.4 CPU 优化方案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 nice -n -10 command renice -n -10 -p 1234 taskset -c 0,1 command taskset -cp 1234 cpulimit -p 1234 -l 50 cat /proc/cpuinfo | grep "cpu MHz" cpufreq-info cpufreq-set -g performance cpufreq-set -g powersave
三、内存性能排查 3.1 内存指标解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 free -h free -m cat /proc/meminfops aux --sort =-%mem | head -20 pmap -x 1234 numactl --hardware
free 命令输出解读:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 total used free shared buff/cache available Mem: 7.8G 3.0G 2.0G 100M 2.8G 4.5G Swap: 2.0G 48M 1.9G total: 总内存 used: 已使用内存(包括 buff/cache) free: 完全空闲内存 shared: 共享内存 buff/cache: 缓冲区 + 缓存 available: 可用内存(估算值,包括可回收的 cache) 关键指标: - 可用内存 = available / total - 内存使用率 = (total - available) / total - Swap 使用率 = used / total
3.2 内存排查工具 /proc/meminfo 详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree" MemTotal: 总内存 MemFree: 完全空闲内存 MemAvailable: 可用内存(包括可回收的 cache) Buffers: 缓冲区内存 Cached: 页面缓存 SwapCached: Swap 缓存 Active: 活跃内存 Inactive: 非活跃内存 Dirty: 待写入磁盘的内存 Writeback: 正在写入磁盘的内存 AnonPages: 匿名页(进程私有内存) Mapped: 映射文件内存 Slab: 内核 slab 分配器 SReclaimable: 可回收的 slab SUnreclaim: 不可回收的 slab SwapTotal: 总 Swap SwapFree: 空闲 Swap
slabtop 命令 1 2 3 4 5 6 7 8 9 10 11 slabtop slabtop -so slabtop -sc q
smem 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 yum install smem -y apt install smem -y smem -r smem -n java smem -m smem -t -k
3.3 内存问题诊断 场景 1:内存使用率高 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 free -h ps aux --sort =-%mem | head -20 cat /proc/1234/status | grep -E "VmSize|VmRSS|VmData|VmStk" pmap -x 1234 | tail -20 watch -n 1 'ps -p 1234 -o pid,rss,vsz,comm' jmap -heap 1234 jmap -histo 1234 | head -50
场景 2:Swap 使用率高 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 free -h cat /proc/swapsvmstat 1 5 for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file done | sort -k 2 -n -r | head -20sar -W 1 5
场景 3:OOM Killer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 dmesg | grep -i "out of memory" dmesg | grep -i "killed process" cat /var/log/messages | grep -i "oom" journalctl -k | grep -i "oom" cat /proc/1234/oom_scorecat /proc/1234/oom_score_adjecho -1000 > /proc/1234/oom_score_adjecho 1 > /proc/sys/vm/panic_on_oom
3.4 内存优化方案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 cat /proc/sys/vm/swappinesssysctl -w vm.swappiness=10 echo "vm.swappiness=10" >> /etc/sysctl.confsync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches cat /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/enabledcat /proc/sys/vm/overcommit_memoryecho 2 > /proc/sys/vm/overcommit_memoryecho 50 > /proc/sys/vm/overcommit_ratio dd if =/dev/zero of=/swapfile bs=1G count=4chmod 600 /swapfilemkswap /swapfile swapon /swapfile echo "/swapfile none swap sw 0 0" >> /etc/fstab
四、磁盘 IO 性能排查 4.1 磁盘 IO 指标解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 df -hdf -i iostat -x 1 5 iostat -d -x -m 1 5 pidstat -d 1 5 iotop
iostat 输出解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 avg-cpu: %user %nice %system %iowait %steal %idle 20.00 0.00 5.00 10.00 0.00 65.00 Device: r/s w/s rkB/s wkB/s rrqm/s wrqm/s %util await r_await w_await sda 50.00 30.00 2000.00 1500.00 5.00 10.00 80.00 10.00 8.00 12.00 avg-cpu: %iowait: IO 等待时间百分比(> 30% 表示 IO 瓶颈) Device: r/s: 每秒读请求数 w/s: 每秒写请求数 rkB/s: 每秒读取的 KB 数 wkB/s: 每秒写入的 KB 数 rrqm/s: 每秒合并的读请求数 wrqm/s: 每秒合并的写请求数 %util: 设备利用率(> 80% 表示饱和) await: IO 请求平均等待时间(ms) r_await: 读请求平均等待时间 w_await: 写请求平均等待时间
4.2 磁盘 IO 排查工具 iotop 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 yum install iotop -y apt install iotop -y iotop iotop -o iotop -b -n 10 iotop -a iotop -p 1234
pidstat IO 统计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 pidstat -d 1 5 pidstat -d -p 1234 1 5 Linux 5.4.0 (hostname) (03/12/2026) _x86_64_ (4 CPU) 02:30:00 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 02:30:01 PM 0 1234 100.00 50.00 0.00 10 java kB_rd/s: 每秒读取的 KB 数 kB_wr/s: 每秒写入的 KB 数 kB_ccwr/s: 取消的写入 KB 数 iodelay: IO 延迟(块)
ioping 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 yum install ioping -y apt install ioping -y ioping -c 10 /dev/sda ioping -c 10 /tmp ioping -c 10 -L /tmp ioping -c 10 -R /tmp
4.3 磁盘 IO 问题诊断 场景 1:IO 等待高 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 vmstat 1 5 iostat -x 1 5 iotop -o pidstat -d 1 5 iostat -x 1 5 cat /sys/block/sda/queue/scheduler
场景 2:磁盘空间不足 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 df -hfind / -type f -size +1G -exec ls -lh {} \; 2>/dev/null du -sh /* 2>/dev/null | sort -hr | head -20find / -type f -mtime -7 -size +100M -exec ls -lh {} \; 2>/dev/null lsof | grep deleted find /var/log -type f -name "*.log" -exec truncate -s 0 {} \; yum clean all apt clean
场景 3:Inodes 耗尽 1 2 3 4 5 6 7 8 9 10 11 12 13 df -ifor i in /*; do echo $i ; find $i | wc -l; done | sort -k2 -n -r | head -20find / -type f -size -1k 2>/dev/null | wc -l
4.4 磁盘 IO 优化方案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 echo deadline > /sys/block/sda/queue/scheduler echo none > /sys/block/nvme0n1/queue/scheduler cat /sys/block/sda/queue/schedulerblockdev --getra /dev/sda blockdev --setra 4096 /dev/sda echo 128 > /sys/block/sda/queue/nr_requests/dev/sda1 / ext4 defaults,noatime 0 1 tune2fs -o journal_data_writeback /dev/sda1 echo "deadline" > /sys/block/sda/queue/scheduler
五、网络性能排查 5.1 网络指标解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ip addr ifconfig -a cat /proc/net/devnetstat -an ss -an ip route netstat -rn cat /etc/resolv.conf
/proc/net/dev 解读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat /proc/net/devInter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed eth0: 1000000 10000 0 0 0 0 0 0 500000 5000 0 0 0 0 0 0 关键指标: - bytes: 字节数 - packets: 数据包数 - errs: 错误数(应为 0) - drop: 丢弃数(应接近 0) - fifo: FIFO 缓冲区错误 - frame: 帧错误 - colls: 冲突数(半双工) - carrier: 载波错误
5.2 网络排查工具 ss 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ss -an ss -tan ss -tlnp ss -ulnp ss -tanp ss -s ss -tm ss -tan | grep :80 ss -tan state established ss -tan state time-wait
netstat 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 netstat -an netstat -ant netstat -tlnp netstat -ulnp netstat -s netstat -rn netstat -i netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
tcpdump 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 tcpdump -i any tcpdump -i eth0 tcpdump -i eth0 port 80 tcpdump -i eth0 host 192.168.1.1 tcpdump -i eth0 tcp tcpdump -i eth0 -w capture.pcap tcpdump -r capture.pcap tcpdump -i eth0 -v tcpdump -i eth0 -vv tcpdump -i eth0 -vvv tcpdump -i eth0 -X tcpdump -i eth0 -XX
ping 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ping www.google.com ping -c 4 www.google.com ping -i 0.5 www.google.com ping -s 1000 www.google.com ping -R www.google.com ping -D www.google.com ping -f www.google.com
traceroute 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 traceroute www.google.com traceroute -I www.google.com traceroute -T www.google.com traceroute -T -p 80 www.google.com traceroute -n www.google.com traceroute -m 30 www.google.com mtr www.google.com mtr -r -c 100 www.google.com
5.3 网络问题诊断 场景 1:网络连接失败 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ip addr show ip link show ip route show ip route get 8.8.8.8 cat /etc/resolv.confnslookup www.google.com dig www.google.com iptables -L -n firewall-cmd --list-all ss -tlnp | grep :80 telnet 192.168.1.1 80 nc -zv 192.168.1.1 80 tcpdump -i eth0 port 80 -n
场景 2:网络延迟高 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ping -c 100 www.google.com traceroute www.google.com mtr www.google.com netstat -i cat /proc/net/devnetstat -s | grep -i retrans ss -tm tcpdump -i eth0 -w latency.pcap wireshark latency.pcap
场景 3:连接数过多 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' netstat -an | grep TIME_WAIT | wc -l lsof -n | grep TCP | awk '{print $1}' | sort | uniq -c | sort -rn ss -tan | awk '{print $5}' | cut -d: -f2 | sort | uniq -c | sort -rn
5.4 网络优化方案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 cat >> /etc/sysctl.conf << EOF # 启用 SYN Cookie net.ipv4.tcp_syncookies = 1 # 减少 TIME_WAIT 超时 net.ipv4.tcp_fin_timeout = 30 # 启用端口复用 net.ipv4.tcp_tw_reuse = 1 # 增加本地端口范围 net.ipv4.ip_local_port_range = 1024 65535 # 增加连接队列 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 # 调整缓冲区 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # 启用 TCP BBR 拥塞控制 net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr EOF sysctl -p cat >> /etc/security/limits.conf << EOF * soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535 EOF ulimit -necho "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.confsysctl -p sysctl net.ipv4.tcp_available_congestion_control sysctl net.ipv4.tcp_congestion_control
六、综合排查案例 案例 1:Web 服务器响应慢 问题现象: 用户反馈网站访问慢,页面加载时间长。
排查步骤:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 uptime top -bn1 | grep "Cpu(s)" top -o %CPU -bn1 | head -10 ps aux | grep java jps -l top -H -p <java_pid> jstack <java_pid> > thread_dump.txt jstat -gc <java_pid> 1000 10
案例 2:数据库查询慢 问题现象: 数据库查询响应时间长,应用超时。
排查步骤:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 vmstat 1 10 iostat -x 1 10 iotop -o mysql -e "SHOW PROCESSLIST" mysql -e "SHOW VARIABLES LIKE 'slow_query_log%'" tail -f /var/log/mysql/slow.logmysqldumpslow /var/log/mysql/slow.log mysql -e "SHOW OPEN TABLES WHERE In_use > 0"
案例 3:内存泄漏 问题现象: 服务器运行一段时间后内存耗尽,服务崩溃。
排查步骤:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 watch -n 1 'free -h' ps aux --sort =-%mem | head -20 watch -n 1 'ps -p <pid> -o pid,rss,vsz,comm' pmap -x <pid> jmap -heap <pid> jmap -histo:live <pid> | head -50 jmap -dump:format=b,file=heap.hprof <pid> dmesg | grep -i "out of memory"
七、监控工具推荐 7.1 系统监控
工具
用途
特点
top/htop
实时监控
简单直观
vmstat
系统统计
轻量级
sar
历史统计
数据持久化
dstat
综合监控
功能全面
glances
Web 界面
易于使用
7.2 应用监控
工具
用途
特点
Prometheus
指标监控
云原生标准
Grafana
可视化
丰富的图表
ELK Stack
日志分析
强大的搜索
SkyWalking
链路追踪
APM 功能
Zabbix
企业监控
功能全面
7.3 快速部署监控栈 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 version: '3.8' services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_data:/var/lib/grafana node-exporter: image: prom/node-exporter ports: - "9100:9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($$|/)"' volumes: grafana_data:
八、总结 Linux 性能排查的关键要点:
方法论 :USE 方法,从利用率、饱和度、错误三个维度分析
工具链 :top/vmstat/iostat/ss 等工具的组合使用
指标解读 :理解每个指标的含义和阈值
优化方案 :根据瓶颈制定针对性的优化方案
记住:监控是基础,排查是技能,优化是目标 。
参考资料:
架构师点评:性能排查要从“单机命令”升级为“系统诊断链路” Linux 性能排查不是背诵 top、iostat、vmstat、sar 命令,而是建立从业务现象到系统资源再到代码路径的诊断链路。线上性能问题通常跨越应用、运行时、容器、内核、网络、存储和外部依赖,单看某一个指标很容易误判。
成熟团队需要把性能排查标准化:先确认用户影响和 SLO,再判断是 CPU、内存、磁盘、网络还是锁竞争,随后结合日志、链路追踪、Profile 和变更记录定位根因。没有变更记录和基线指标,排查就会变成临场猜测。
企业落地建议:建立 Linux 性能基线和 Runbook 建议围绕关键服务建立性能治理闭环:
基线指标 :记录正常情况下 CPU、Load、内存、IO、网络、连接数、GC、线程数等指标范围。
分层告警 :区分资源饱和、错误率上升、延迟升高、队列堆积和容量不足,不要只看主机 CPU。
标准 Runbook :为 CPU 飙高、内存泄漏、磁盘打满、网络抖动、文件句柄耗尽等场景准备排查步骤。
变更关联 :把发布、配置变更、扩缩容、依赖变更与监控事件关联起来。
容量复盘 :每次重大性能问题后更新容量模型和压测方案,而不是只修当次故障。
在容器化环境中,还要关注 cgroup 限制、容器 CPU throttling、内存 OOM、节点资源争抢和 Kubernetes 调度策略。很多“Linux 性能问题”本质上是容器资源限制和平台治理问题。
AI 运维助手的合理用法 AI Agent 很适合做性能排查的一线助手:汇总监控面板、提取异常日志、对比变更记录、生成排查假设、推荐下一步命令。但 Agent 的输出必须建立在真实观测数据上,不能只根据错误文本猜答案。
推荐实践:
将常用性能命令封装为只读工具,限制 Agent 可执行范围;
让 Agent 先输出“证据链”,再输出结论;
对重启、扩容、限流、杀进程等动作设置人工确认;
将排查过程沉淀为知识库,后续相似告警可复用;
对 PR 审查官引入性能风险检查,例如发现未加索引查询、无限循环、过大内存加载等问题。
这样可以把个人经验型排障,逐步升级为可复制的平台能力。