嵌入式模拟面试拷打【9】Linux系统性能问题排查思路
1. CPU 性能分析与优化
1.1 CPU 监控工具概览
- top: 实时显示系统总体及各个进程的 CPU 和内存使用情况。
- ps: 提供每个进程的运行状态及资源使用详情。
- pidstat: 专注于分析每个进程的 CPU 使用情况。
1.2 CPU 使用率问题排查
在排查 CPU 使用率问题时,需区分以下几种情况:
- 用户 CPU 过高: 通常指示进程性能问题。
- 系统 CPU 过高: 可能由系统调用性能问题引起。
- I/O 等待 CPU 过高: 通常与网络或磁盘 I/O 问题相关。
- 中断占用 CPU 过高: 可能是中断服务程序问题。
1.3 平均负载分析
使用 uptime
或 top
命令查看系统平均负载,即当前平均活跃进程数。例如:
$ uptime
9:12 up 22:16, 2 users, load averages: 1.38 1.47 1.57
分析流程:
- 使用
top
查看平均负载。 - 确定服务器 CPU 数量:
grep 'model name' /proc/cpuinfo | wc -l
- 配置监控告警,如 Zabbix,当平均负载超过 CPU 数量的 80% 时发出警告。
- 检查上下文切换次数、CPU 缓存命中率及进程状态(如 running 或 sleep)。
1.4 CPU 使用率与负载的区别
- CPU 使用率: 统计单位时间内 CPU 的使用情况,与平均负载不一定完全对应。
- CPU 密集型进程: 高 CPU 使用率导致平均负载升高。
- I/O 密集型进程: 高平均负载但 CPU 使用率不一定高。
1.5 iowait 分析
当 top
显示高 iowait
但 CPU 使用率低时,可能存在 I/O 密集型进程。使用 pidstat -d
和 sar -n
分别分析磁盘和网络 I/O。
1.6 CPU 使用率分析流程
- 使用
top/uptime
查看平均负载。 - 使用
mpstat
和pidstat
分析各进程的 CPU 使用情况和iowait
。 - 使用
vmstat
查看上下文切换和中断次数。 - 使用
perf top
实时观察占用 CPU 最多的函数。
1.7 短时进程分析
对于频繁重启的短时进程,使用 pstree
查找父进程,并检查其是否正确处理子进程。使用 perf record
和 perf report
进行详细分析。
1.8 系统调用追踪
使用 strace -p pid
追踪指定进程的系统调用,若失败,可尝试使用 -f
参数追踪父进程或子进程。
1.9 进程切换与中断分析
使用 pidstat -w
查看进程切换情况,结合 /proc/interrupts
文件分析硬中断。
1.10 命令执行验证
使用 echo $?
确认上一条命令的执行结果,0 表示成功。
2. 内存性能分析与优化
2.1 内存监控工具
- free: 查看系统内存使用情况。
- top/ps: 查看进程内存使用情况。
- vmstat/sar: 观察内存变化趋势。
2.2 内存问题分析思路
- 使用
free
和top
查看系统整体内存使用情况。 - 使用
vmstat
和pidstat
分析内存使用趋势。 - 针对性分析内存分配、缓存/缓冲区及具体进程的内存使用(如
pmap
)。
2.3 OOM 监控问题
若监控显示内存水位低但发生 OOM,可能是监控频率不足导致的内存尖刺被平均值掩盖。
3. 软中断与网络分析
3.1 软中断监控
使用 /proc/softirqs
文件查看软中断情况,watch
命令实时监控:
watch -d cat /proc/softirqs
3.2 网络数据分析
使用 sar -n
查看指定网卡的网络数据包收发情况,包括 BPS 和 PPS。通过 rxpck
和 rxkB
对比判断是否存在大量小包,如网络攻击。使用 tcpdump
查看监听端口。
秋招日寄|嵌入式模拟面试拷打 文章被收录于专栏
一些八股模拟拷打Point,万一有点用呢