中高级面试不仅考察 JVM 运行时数据区、虚拟机栈、内存分配、类加载机制、垃圾回收算法及线程关系等基础概念,更关注实际问题的排查能力。
CPU 持续飙高排查步骤
- 使用
top命令查看当前 CPU 使用情况,找到占用过高的进程 PID(例如 12677)。 - 执行
top -H -p <PID>找出 CPU 占用较高的线程 ID,并转换为十六进制。 - 运行
jstack -l <PID> > temp.txt打印当前进程的线程栈信息。 - 在输出文件中查找对应十六进制线程 ID 的运行栈,分析代码逻辑。
OOM 异常排查步骤
- 使用
top指令查询服务器系统状态。 - 执行
ps -aux | grep java找出当前 Java 进程的 PID。 - 使用
jstat -gcutil <PID> <interval>查看当前 GC 状态。 - 运行
jmap -histo:live <PID>统计存活对象的分布情况,从高到低查看占据内存最多的对象。 - 使用
jmap -dump:format=b,file=<文件名> <PID>利用 Jmap 导出堆转储文件。 - 使用性能分析工具(如 MAT)对导出的文件进行分析。
掌握上述排查流程有助于应对面试及实际工作挑战。在实际解决问题时,还需综合考虑内存参数配置是否合理、老年代和新生代比例是否协调等因素。


