嵌入式模拟面试拷打【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 平均负载分析

使用 uptimetop 命令查看系统平均负载,即当前平均活跃进程数。例如:

$ uptime
9:12 up 22:16, 2 users, load averages: 1.38 1.47 1.57

分析流程:

  1. 使用 top 查看平均负载。
  2. 确定服务器 CPU 数量:
    grep 'model name' /proc/cpuinfo | wc -l
    
  3. 配置监控告警,如 Zabbix,当平均负载超过 CPU 数量的 80% 时发出警告。
  4. 检查上下文切换次数、CPU 缓存命中率及进程状态(如 running 或 sleep)。

1.4 CPU 使用率与负载的区别

  • CPU 使用率: 统计单位时间内 CPU 的使用情况,与平均负载不一定完全对应。
    • CPU 密集型进程: 高 CPU 使用率导致平均负载升高。
    • I/O 密集型进程: 高平均负载但 CPU 使用率不一定高。

1.5 iowait 分析

top 显示高 iowait 但 CPU 使用率低时,可能存在 I/O 密集型进程。使用 pidstat -dsar -n 分别分析磁盘和网络 I/O。

1.6 CPU 使用率分析流程

  1. 使用 top/uptime 查看平均负载。
  2. 使用 mpstatpidstat 分析各进程的 CPU 使用情况和 iowait
  3. 使用 vmstat 查看上下文切换和中断次数。
  4. 使用 perf top 实时观察占用 CPU 最多的函数。

1.7 短时进程分析

对于频繁重启的短时进程,使用 pstree 查找父进程,并检查其是否正确处理子进程。使用 perf recordperf report 进行详细分析。

1.8 系统调用追踪

使用 strace -p pid 追踪指定进程的系统调用,若失败,可尝试使用 -f 参数追踪父进程或子进程。

1.9 进程切换与中断分析

使用 pidstat -w 查看进程切换情况,结合 /proc/interrupts 文件分析硬中断。

1.10 命令执行验证

使用 echo $? 确认上一条命令的执行结果,0 表示成功。

alt

2. 内存性能分析与优化

2.1 内存监控工具

  • free: 查看系统内存使用情况。
  • top/ps: 查看进程内存使用情况。
  • vmstat/sar: 观察内存变化趋势。

2.2 内存问题分析思路

  1. 使用 freetop 查看系统整体内存使用情况。
  2. 使用 vmstatpidstat 分析内存使用趋势。
  3. 针对性分析内存分配、缓存/缓冲区及具体进程的内存使用(如 pmap)。

2.3 OOM 监控问题

若监控显示内存水位低但发生 OOM,可能是监控频率不足导致的内存尖刺被平均值掩盖。

alt

3. 软中断与网络分析

3.1 软中断监控

使用 /proc/softirqs 文件查看软中断情况,watch 命令实时监控:

watch -d cat /proc/softirqs

3.2 网络数据分析

使用 sar -n 查看指定网卡的网络数据包收发情况,包括 BPS 和 PPS。通过 rxpckrxkB 对比判断是否存在大量小包,如网络攻击。使用 tcpdump 查看监听端口。

alt

#牛客激励计划#

一些八股模拟拷打Point,万一有点用呢

全部评论

相关推荐

1. 如何在嵌入式系统中实现蓝牙通信?2. 使用RTOS如何实现多线程的资源共享?3. 如何使用UART实现双向通信?4. 在FreeRTOS中如何实现任务的延时机制?5. 如何通过SPI与传感器进行数据交换?6. 使用I2C与温度传感器进行数据读取的步骤?7. 如何在嵌入式系统中实现数据的日志记录?8. 使用PWM控制电机速度的基本原理?9. 在FreeRTOS中如何实现任务的堆栈监控?10. 如何使用ADC读取模拟传感器的值?11. 在嵌入式系统中如何实现RTC的时间设置与读取?12. 使用中断控制LED灯的闪烁?13. 如何在嵌入式系统中实现实时数据监控?14. 使用CAN总线实现多节点通信的步骤?15. 在FreeRTOS中如何实现互斥锁的使用?16. 如何使用DMA进行ADC数据采集?17. 在嵌入式系统中如何实现数据压缩和解压?18. 使用MQTT协议实现设备的远程控制?19. 如何在FreeRTOS中实现任务的优先级反转?20. 使用USB OTG进行主从设备的切换?21. 在嵌入式系统中如何实现音频录制?22. 如何通过网络实现设备的远程监控?23. 使用GPIO控制步进电机的运动?24. 在FreeRTOS中如何实现时间管理的最佳实践?25. 如何使用SD卡进行大容量数据存储?26. 在嵌入式系统中如何实现加密算法的硬件加速?27. 使用UART调试信息的格式化输出?28. 如何在FreeRTOS中实现事件组的使用?29. 使用模拟量输出控制设备的工作状态?30. 在嵌入式系统中如何实现固件的版本管理?嵌入式C++面经推荐大佬面经  链接在下边  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
4
6
分享

创作者周榜

更多
牛客网
牛客企业服务