后端场景面试题, 线上 CPU 飙高如何排查?
后端场景面试题, 线上 CPU 飙高如何排查?
QA
Step 1
Q:: 线上 CPU 飙高如何排查?
A:: 线上 CPU 飙高通常是系统负载过高、应用程序运行效率低或某些进程存在性能问题的表现。排查步骤通常包括:
1.
使用 top
或 htop
等工具查看占用 CPU 较高的进程。
2.
分析特定进程,使用 ps
或 pidstat
命令查看进程的线程情况。
3.
使用 strace
或 perf
工具对高 CPU 占用的进程进行跟踪,分析系统调用和执行情况。
4.
检查应用程序的日志,查看是否有异常信息或错误提示。
5.
结合监控系统(如 Prometheus、Grafana)查看历史数据,判断是否有某些定时任务或流量高峰导致。
6.
如果是 JVM 应用,可以使用 jstack
或 jmap
等工具查看线程栈或内存使用情况。
Step 2
Q:: 使用哪些工具可以帮助排查 CPU 飙高的问题?
A:: 排查 CPU 飙高的问题可以使用多种工具:
1.
top
或 htop
:实时查看 CPU 使用情况及各进程的资源占用。
2.
ps
:查看系统中进程的详细信息。
3.
strace
:跟踪系统调用,帮助找出高 CPU 占用的原因。
4.
perf
:性能分析工具,详细分析 CPU 和程序的使用情况。
5.
jstack
或 jmap
:针对 Java 应用,获取线程栈信息或内存分配信息。
6.
监控工具如 Prometheus、Grafana:用于查看历史监控数据,帮助定位问题。
Step 3
Q:: 如何使用 jstack 分析 CPU 飙高的 Java 应用?
A:: 当 Java 应用出现 CPU 飙高时,使用 jstack
命令生成当前 JVM 的线程栈信息,并分析哪个线程占用了大量 CPU。
1.
使用 top
找到占用 CPU 较高的 Java 进程的 PID。
2.
使用 top -Hp <PID>
找到具体的线程 ID。
3.
使用 jstack <PID>
生成线程栈信息,定位与高 CPU 使用线程 ID 对应的线程栈。
4.
分析线程栈,查找可能导致 CPU 飙高的代码路径。