interview
backend-scenarios
线上CPU飙高如何排查?

后端场景面试题, 线上 CPU 飙高如何排查?

后端场景面试题, 线上 CPU 飙高如何排查?

QA

Step 1

Q:: 线上 CPU 飙高如何排查?

A:: 当线上系统的 CPU 使用率突然飙升时,排查问题的步骤包括:1. 使用 tophtop 命令查看系统资源的使用情况,找出占用 CPU 最多的进程;2. 使用 ps -aux 命令查看进程的详细信息,包括 PID、用户、CPU 占用率等;3. 使用 jstack 对 Java 应用进行线程栈分析,找出可能的热点线程;4. 如果是数据库导致的,可以查看慢查询日志或使用 explain 命令分析 SQL 性能问题;5. 检查应用程序的日志文件,查找可能的异常信息。最后,结合业务场景和最近的代码变更,逐步缩小排查范围。

Step 2

Q:: 如何通过 jstack 命令排查 CPU 高使用率问题?

A:: jstack 命令可以生成 Java 虚拟机(JVM)当前运行线程的堆栈信息。首先使用 top 命令找到占用 CPU 较高的 Java 进程,然后使用 ps -mp <PID> -o THREAD,tid,time 命令列出该进程下的线程信息,找到占用 CPU 较高的线程 TID。将 TID 转换为十六进制格式,再用 jstack <PID> | grep <0xTID> 命令定位该线程的堆栈信息,从中查找潜在的死循环或热点代码。

Step 3

Q:: 哪些因素会导致线上 CPU 飙高?

A:: 导致线上 CPU 飙高的因素可能包括:1. 代码中的死循环或无效循环;2. 频繁的垃圾回收(GC);3. 锁竞争严重,导致大量线程处于忙等待状态;4. 数据库慢查询或未优化的 SQL;5. 外部接口调用延迟,导致线程积压;6. 负载突增,导致资源不堪重负。

Step 4

Q:: 如何使用 perf 工具分析 CPU 性能问题?

A:: perf 是一个强大的 Linux 性能分析工具,可以用于采集系统的硬件性能数据。使用 perf top 可以实时查看系统中消耗 CPU 资源最多的函数或指令;使用 perf record 可以记录一段时间内的 CPU 性能数据,之后通过 perf report 生成分析报告,从中找出性能热点。

用途

线上 CPU 飙高是后端开发和运维人员常常遇到的紧急问题。此类问题可能直接影响到用户体验和业务运行,甚至导致系统宕机。排查和解决 CPU 高使用率问题需要较强的系统和代码分析能力,以及对系统工具的熟练使用。因此,在面试中考察应聘者对这类问题的处理能力,可以有效评估其在高压力环境下的应对能力,以及对系统性能的敏感度。\n

相关问题

🦆
如何优化 Java 应用的垃圾回收?

优化 Java 应用的垃圾回收(GC)可以通过以下方法:1. 选择合适的垃圾回收器,如 G1、CMS 等,依据应用的特性进行选择;2. 调整堆大小,减少 Full GC 的频率;3. 优化代码,减少对象的创建和销毁频率;4. 使用对象池,复用大对象;5. 调整 JVM 参数,如 -XX:MetaspaceSize-XX:MaxGCPauseMillis,以减少 GC 对应用性能的影响。

🦆
如何排查数据库性能瓶颈?

排查数据库性能瓶颈的方法包括:1. 使用慢查询日志分析 SQL 执行时间;2. 使用 explain 分析 SQL 查询计划,找出索引使用问题;3. 检查数据库表的锁等待情况;4. 使用数据库监控工具查看 CPU、IO 和内存使用情况;5. 分析数据库连接池的配置,避免连接耗尽或连接池配置不合理导致的性能问题。

🦆
如何处理应用程序的内存泄漏问题?

处理内存泄漏问题的步骤包括:1. 使用 jmap 工具生成堆转储文件,并通过 jhat 或类似工具分析堆内对象的分布;2. 使用 MAT 工具分析内存泄漏的根本原因;3. 检查代码中未及时释放资源的情况,如未关闭的流、未释放的数据库连接等;4. 在开发过程中使用代码审查和静态分析工具提前发现内存泄漏风险。

🦆
如何通过 sar 工具进行系统性能监控?

sar 是 Linux 系统下常用的系统性能监控工具,可以采集 CPU、内存、IO 等多方面的性能数据。使用 sar -u 可以查看 CPU 的使用率,sar -r 可以查看内存的使用情况,sar -d 可以监控磁盘 I/O 性能。通过设置 cron 定时任务,可以定期采集系统性能数据,便于长期趋势分析。