综合性能与故障场景题

共 18 题
#

1. 线上 CPU 100% 的排查路径,从 top 到火焰图的完整工具链如何使用?

A 火焰图宽度代表单次函数调用耗时,越宽的越慢
B top 已能直接给出具体代码行,无需其他工具
C 火焰图函数区块宽度代表该函数在采样中的累计占比,可据此定位热点 ✓ 正确答案
D 只要 CPU 100% 就一定是用户态计算问题
#

2. 接口延迟突增但 CPU/内存正常时,如何从网络、锁、GC、IO 分层定位?

A 一定是 CPU 计算瓶颈
B 必然由内存泄漏导致
C 与外部依赖无关
D 多为锁等待、GC 停顿、网络或 IO 等待 ✓ 正确答案
#

3. 进程处于 D 状态(不可中断睡眠)无法 kill 的排查,如何定位阻塞在哪个内核路径(IO 等待或锁),如何处理?

A D 状态进程不响应信号,多因磁盘 IO 或内核锁阻塞,需等待内核条件恢复 ✓ 正确答案
B kill -9 可以立即终止 D 状态进程
C D 状态与 T 状态含义完全相同
D D 状态只会发生在用户态
#

4. 网络丢包/重传导致接口延迟变高的定位,如何用 ss -s 重传统计与抓包确认,丢包与重传对延迟分位的影响如何?

A 丢包只影响平均延迟,对 P99 无影响
B ss -s 无法统计重传
C 抓包无法确认重传行为
D 重传由 RTO 超时或快速重传触发,会把部分请求延迟放大,显著拉高 P99 ✓ 正确答案
#

5. 内存持续增长的进程如何区分"泄漏"与"正常缓存增长",如何取证?

A 内存增长到了多少 GB
B 是否使用 C++ 编写
C 进程是否在 32 位系统
D 增长后是否收敛到稳态,以及 GC 后存活对象基线是否持续抬升 ✓ 正确答案
#

6. 分布式调用超时的排查,如何结合 Trace 与依赖关系图缩小范围?

A 通过逐 span 拆解耗时并关联依赖关系,把根因缩小到具体服务或资源 ✓ 正确答案
B 只能用来查看请求是否成功
C 与根因定位无关
D 只能用于定位 CPU 问题
#

7. 磁盘 IO 成为瓶颈时,如何用 iostat/iotop/pidstat 定位到具体进程与文件?

A 直接用 lsof 找出所有文件
B 磁盘 IO 与进程无关
C 只依赖 iotop 即可一步到位
D iostat 确认磁盘瓶颈 → iotop/pidstat 定位进程 → lsof/路径定位文件 ✓ 正确答案
#

8. CPU 使用率 100% 但系统响应慢的排查路径,如何区分计算密集、上下文切换、锁竞争与 IO 等待?

A %wa 高主要反映用户态计算密集
B 需结合 us/sy/wa/si 拆分、运行队列与上下文切换来区分计算密集、切换、锁竞争与 IO 等待 ✓ 正确答案
C 上下文切换与锁竞争不会影响 CPU 指标
D 只要 %us 高就一定是正常业务计算
#

9. 内存持续增长的定位,堆内/堆外、JVM/非 JVM 进程、缓存与连接池泄漏如何逐层排查?

A 只查堆内存即可覆盖所有泄漏
B 非 JVM 进程不存在内存泄漏
C 需分层排查堆内、堆外/Native 内存,并关注缓存与连接池这类有界资源是否无界增长 ✓ 正确答案
D 堆外内存不会被回收
#

10. 连接与文件描述符泄漏的排查,如何用 ss/lsof 发现 fd 增长,TIME_WAIT 与 CLOSE_WAIT 分别对应什么问题?

A CLOSE_WAIT 是正常现象无需关注
B 两者都是主动关闭方状态
C TIME_WAIT 是主动关闭方的正常状态,CLOSE_WAIT 增长通常表示应用未关闭连接(fd 泄漏) ✓ 正确答案
D TIME_WAIT 表示应用层泄漏
#

11. GC 频繁与 Full GC 的排查,如何结合 GC 日志、堆 dump 与对象分配速率定位大对象或内存泄漏?

A GC 日志与堆 dump 对定位 Full GC 无帮助
B 大对象进老年代不会导致 Full GC
C Full GC 只由 CPU 引起
D 需结合 GC 日志看频次停顿、堆 dump 分析存活对象、分配速率判断大对象引入 ✓ 正确答案
#

12. 数据库连接池被打满与线程池被打满的关联排查思路?

A 两池常互为因果,需用监控时间线对齐判断谁先被打满,再沿调用链定位根因 ✓ 正确答案
B 两个池完全独立,无需关联分析
C 连接池打满必然由线程池引起
D 扩容线程池即可彻底解决连接池打满
#

13. 磁盘 IO 打满的应急与根治,如何快速定位高 IO 进程、评估是否需要扩容或优化查询?

A 磁盘 IO 满只能扩容
B 优化查询对降低 IO 无意义
C 应优先排查并优化产生无效 IO 的查询(如全表扫描、缺索引),确需扩容时才扩容 ✓ 正确答案
D 扩容后 IO 问题必然消失
#

14. 内存溢出的排查,堆栈分析、dump 与 GC 日志如何结合?

A OOM 只有堆内存不足一种类型
B 堆 dump 无法定位对象引用
C 需根据 OOM 类型(堆/Metaspace/堆外/线程)选择分析,结合自动堆 dump 与 GC 日志用 MAT 定位引用链 ✓ 正确答案
D GC 日志与 OOM 无关
#

15. 磁盘 IO 高的定位,iostat 与进程 IO 分析如何实施?

A iostat 看磁盘级别饱和与 IO 类型,pidstat/iotop 定位进程级 IO,再定位文件 ✓ 正确答案
B util% 高低与随机/顺序 IO 无关
C 随机 IO 只影响带宽不影响 IOPS
D 进程级 IO 与磁盘瓶颈无关
#

16. 缓存大面积失效(击穿/雪崩)导致 DB 压力突增,如何区分击穿、雪崩与穿透并逐层治理?

A 穿透针对不存在的 key,击穿针对单个热点 key 过期,雪崩针对大批 key 同时失效,治理手段各不相同 ✓ 正确答案
B 三者成因完全相同,治理手段一致
C 雪崩只与单个 key 有关
D 穿透不需要布隆过滤器或缓存空值治理
#

17. OOM 的排查,cgroup 限制、堆内存与 swap 如何分析?

A 容器 OOM 只可能是 Java 堆内存不足
B cgroup 限制与应用无关
C 需区分 JVM 堆 OOM 与 cgroup 内存限制触发的 OOM,并检查堆与容器内存是否匹配、swap 的影响 ✓ 正确答案
D 设置 MaxRAMPercentage 与容器 OOM 无关
#

18. 磁盘空间满或 inode 耗尽导致写入失败,如何用 df、df -i 定位并做日志清理与容量规划?

A df -i 只能看空间,不能看 inode
B df -h 看空间、df -i 看 inode,需区分空间满与 inode 耗尽,并用 logrotate 与监控规划根治 ✓ 正确答案
C inode 耗尽与文件数量无关
D 磁盘空间满只能用扩容解决