后端面试里经常会问 Linux 排查。低分回答是背一串命令,高分回答是先讲现象,再讲排查路径。面试官可能问:线上服务突然变慢,你怎么查?处理器负载,也就是常说的 CPU 使用率,突然飙高怎么定位?端口被占用怎么办?日志太多怎么找关键错误?
这些问题考的是你是否具备基本线上生存能力。
先判断是哪个资源异常
服务变慢不一定是处理器问题。可能是处理器负载高、内存不足、磁盘满、网络慢、数据库慢、下游接口慢。排查时先看整体资源,再定位具体进程。比如看负载、处理器使用、内存、磁盘空间和网络连接情况。
面试里不需要机械背命令,可以讲思路:先确认机器有没有资源瓶颈,再看具体进程,再结合应用日志和监控判断业务原因。
处理器负载高要定位到线程和代码
如果是 Java 服务处理器负载高,可以先找到占用高的进程,再看进程里哪些线程占用高,最后结合线程堆栈定位代码。常见原因包括死循环、频繁计算、大量序列化、日志过多、锁竞争或垃圾回收频繁。
只说“重启服务”不是排查。重启可能临时恢复,但会丢失现场。面试里可以说:紧急恢复和保留现场要平衡,能先保留线程堆栈和日志,再根据影响范围决定是否重启。
内存和磁盘要看趋势
内存上涨要看是短时间峰值还是持续增长。持续增长可能是缓存无限扩大、对象未释放、批量任务一次加载太多数据。磁盘满则可能是日志没有切割、临时文件堆积、上传文件未清理。
日志排查要会按时间、错误关键字、请求标识和业务单号过滤。真实项目里,能通过一次请求的标识串起网关、应用和下游日志,会比单纯会看文件更有价值。
一段项目表达
可以这样说:遇到服务变慢,我会先看机器资源和应用监控,确认是处理器负载、内存、磁盘还是外部依赖。处理器负载高时定位到进程和线程,再看线程堆栈;内存上涨时看堆使用趋势和最近发布变更;日志按时间和请求标识过滤。排查过程中先保留现场,再决定扩容、降级、回滚或重启。
Linux 排查面试不是命令背诵,而是排查顺序和现场意识。
命令背后要回答的问题
Linux 排查不是把 top、ps、netstat、tail 背一遍。每个命令都应该服务一个判断:是不是资源瓶颈、瓶颈在哪个进程、是否和某次发布或流量变化有关、有没有用户正在受影响。
| 想回答的问题 | 可看的线索 | 继续追问 | 回答亮点 |
|---|---|---|---|
| 是 CPU 还是等待 | load、CPU 使用率、线程状态 | 哪个线程在忙 | 能定位到线程栈和代码段 |
| 是内存泄漏还是流量增长 | 内存曲线、GC、对象增长 | 是否持续不可回落 | 区分正常缓存和泄漏 |
| 是端口或连接问题 | 监听端口、连接状态 | 是否连接耗尽 | 关联连接池和下游超时 |
| 日志怎么找 | 时间、请求标识、错误码 | 是否能串起链路 | 不只搜索 error |
面试里可以少背命令名,多讲“我用这些信息做什么判断”。这会显得更像真实排查,而不是临时记了一串 Linux 工具。