后端岗位面试题更新 2026-08-05

在生产环境遇到线上 CPU Load 飙高的问题时,作为后端工程师,你会采取怎样的排查步骤来定位并解决问题?

后端开发问题排查

考察说明

考察候选人面对线上 CPU 负载高时的排查思路、工具使用能力和问题定位的条理性。

回答思路

  1. 【回答框架 1】先利用 top 或 uptime 获取 load average,结合 CPU 核数判断负载程度;再用 top 按 CPU 占用排序,定位消耗最高的进程 PID。
  2. 【回答框架 2】对该进程用 top -Hp 显示其线程列表,找出占 CPU 最高的线程 TID;将 TID 转为十六进制,使用 jstack PID 导出线程堆栈,搜索该十六进制 nid 找到问题线程。
  3. 【回答框架 3】分析堆栈中的业务代码,常见原因包括死循环、频繁 GC、正则回溯、日志过多、线程池过载等;若堆栈显示 GC 频繁,则使用 jstat -gcutil 观察 GC 频率,用 jmap -heap 检查堆内存使用。
  4. 【回答框架 4】根据根因修复,如修正代码、调整 JVM 参数、优化 SQL、减少日志量或增加限流;修复后观察 load 是否下降,并部署监控告警防止复发。
  5. 【回答框架 5】额外补充:load 高也可能是 IO 等待导致,此时 CPU idle 可能较低但 CPU 使用率并不高,需用 iostat 检查磁盘 IO,避免只盯 CPU。
  6. 【关键点 1】用 top 找高 CPU 进程 PID,再 top -Hp 找高 CPU 线程 TID。
  7. 【关键点 2】用 jstack 抓线程快照,TID 转十六进制 nid 定位代码位置。
  8. 【关键点 3】常见根因:死循环、频繁 GC、正则回溯、日志过多、线程池过载。
  9. 【关键点 4】GC 频繁时配合 jstat 和 jmap 分析堆内存。
  10. 【关键点 5】IO 密集也可能导致 load 高,需用 iostat 排查磁盘。
  11. 【易错点 1】不能只查 CPU,load 高可能由 IO 等待引起,CPU 使用率不高时要用 iostat 排查。
  12. 【易错点 2】jstack 是瞬时快照,对偶发问题可能抓不到,需多次采样或加 jstack -F。
  13. 【易错点 3】不要把问题都归因于业务代码,要排除宿主机资源争抢、CPU 限制等系统因素。