系统运维(传统/通用运维)的面试题和云原生方向侧重不同,更强调 Linux 底层、服务排障、脚本自动化、安全加固和稳定性保障。下面按模块整理高频题,附考察意图和答题要点。
一丶题目
一、Linux 基础与内核
1. 描述 Linux 启动流程。
- 要点:BIOS/UEFI → GRUB → 内核加载 → initramfs → systemd(PID 1)→ 加载 target → 启动服务。能说出每个阶段故障的表现(如 grub 损坏、内核 panic、进入 emergency mode)。
2. 硬链接和软链接的区别?
- 要点:硬链接共享 inode、不能跨文件系统、不能链目录;软链接是独立文件存路径、可跨分区、源删除后失效。
lnvsln -s。
3. 进程状态有哪些?D 状态意味着什么?
- 要点:R/S/D/T/Z;D 是不可中断睡眠,通常卡在 IO,
kill -9也杀不掉,要排查存储/网络挂载。
4. 系统负载(load average)怎么看?高但 CPU 不高是什么原因?
- 要点:load 统计运行+不可中断进程;高 CPU 不高可能是 IO 等待、大量 D 状态、swap 抖动。结合
vmstat、iostat、pidstat判断。
5. 内存不足时 Linux 怎么处理?OOM Killer 机制?
- 要点:页缓存回收 → swap → OOM Killer 按 oom_score 杀进程;
/proc/<pid>/oom_score_adj调优先级;dmesg看 OOM 日志。
6. free 命令的 buff/cache 是什么?可用内存怎么算?
- 要点:buff/cache 可回收;看
available而非free;echo 3 > /proc/sys/vm/drop_caches可手动清(生产慎用)。
7. 文件被删除但磁盘没释放,怎么排查?
- 要点:进程仍持有句柄,
lsof | grep deleted找到进程,重启或> /proc/<pid>/fd/<n>清空。
8. inode 耗尽怎么处理?
- 要点:
df -i查看;大量小文件导致;定位目录(find统计)、清理临时文件/邮件队列/session 文件。
二、性能排查(面试重灾区)
9. CPU 使用率高,如何定位到具体代码/线程?
- 要点:
top→top -Hp <pid>找线程 → 线程 ID 转十六进制 →jstack(Java)/perf top/gdb;区分用户态 vs 内核态(mpstat)。
10. 磁盘 IO 慢如何排查?
- 要点:
iostat -x 1看 %util、await、r/s w/s;iotop找进程;blktrace深入;排查慢查询、日志刷盘、swap、RAID 卡缓存策略。
11. 网络丢包如何排查?
- 要点:
ping/mtr分段 →netstat -s/nstat看丢包计数 →ss -i看重传 →tcpdump抓包 → 排查网卡、交换机、MTU、防火墙、连接数上限。
12. 服务器变慢,给出完整排查思路。
- 要点:先看
uptime(负载)→top(CPU/内存)→vmstat(上下文切换/swap)→iostat(磁盘)→ss(连接数)→dmesg(硬件/内核报错)→ 应用日志。按"CPU-内存-磁盘-网络-应用"分层。
13. 大量 TIME_WAIT 怎么优化?
- 要点:主动关闭方产生;调
net.ipv4.tcp_tw_reuse=1、tcp_fin_timeout;用连接池/长连接;tcp_max_tw_buckets谨慎调。
14. 一台机器能建立多少 TCP 连接?
- 要点:受四元组限制(源 IP+端口、目的 IP+端口、协议);理论上百万级,实际受文件描述符、内存、端口范围限制;
ulimit -n、net.ipv4.ip_local_port_range。
三、服务与中间件运维
15. Nginx 常见故障排查?
- 要点:
nginx -t配置检查;502(后端不可达/超时)、504(后端超时)、413(body 限制)、499(客户端断开);error.log、access.log、stub_status监控。
16. Nginx 如何做限流和负载均衡?
- 要点:
limit_req(漏桶)、limit_conn;upstream 轮询/加权/ip_hash/least_conn;健康检查(开源版被动、商业版主动)。
17. 如何排查 MySQL 连接数打满?
- 要点:
show processlist、show status like 'Threads_connected';排查慢查询、连接泄漏、max_connections设置;应用侧连接池配置。
18. Redis 内存满了怎么办?
- 要点:
maxmemory-policy(LRU/LFU/ttl/random);排查大 key(--bigkeys)、热 key;扩容或分片;持久化策略对内存的影响。
19. 消息队列(Kafka/RabbitMQ)消费堆积怎么处理?
- 要点:扩消费者/分区、提升并行度;排查消费慢(下游阻塞、反序列化、rebalance);监控 lag。
四、Shell 与自动化
20. 写一个脚本:检查服务端口是否存活,挂了自动拉起并告警。
- 要点:
ss/nc检测端口 → 失败重试 →systemctl restart→ 记录日志 → 调 webhook 告警;注意幂等、防止误杀、加锁防并发。
21. 统计访问日志中 IP 访问量 Top10。
- 要点:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10。
22. 批量在多台机器执行命令怎么做?
- 要点:Ansible(inventory + ad-hoc/playbook)、批量 SSH(for 循环 + 免密);强调幂等、并发控制(
-f)、失败处理。
23. 如何做定时任务管理?crontab 不执行怎么排查?
- 要点:环境变量差异、PATH、权限、crond 服务状态、日志
/var/log/cron、脚本绝对路径、输出重定向。
五、安全加固与合规
24. Linux 安全加固做哪些?
- 要点:最小化安装、关闭无用服务/端口、SSH 加固(禁 root、改端口、密钥登录)、防火墙(iptables/firewalld)、sudo 最小权限、日志审计(auditd)、补丁管理、基线扫描。
25. 堡垒机的作用?运维审计怎么做?
- 要点:统一入口、权限管控、命令审计、录屏回放、满足等保要求;配合 CMDB 和审批流。
26. 如何防止误操作(如 rm -rf)?
- 要点:权限分离、危险命令别名确认、
safe-rm、回收站机制、变更审批、备份先行、生产禁 root 直连。
六、高可用与稳定性
27. 如何设计一个高可用架构?
- 要点:消除单点(负载均衡、多实例)、故障转移(keepalived/VRRP)、数据冗余(主从/集群)、健康检查、容量冗余、演练。
28. Keepalived 脑裂怎么产生、怎么防?
- 要点:心跳网络中断导致双主;用
vrrp_script检测业务、双心跳线、仲裁设备(ping 网关)、nopreempt配置。
29. 备份策略怎么设计?
- 要点:3-2-1 原则、全量+增量、定期恢复演练(备份不验证等于没有)、异地容灾、RPO/RTO 指标。
30. 一次线上故障的完整处理流程?
- 要点:止血(回滚/切流/重启)→ 通报 → 定位 → 恢复 → 复盘(时间线、根因、改进项)。强调"先恢复业务再查根因"。
七、虚拟化与云基础
31. 虚拟化与容器的区别?
- 要点:虚机有独立内核、隔离强、启动慢;容器共享宿主内核、轻量、启动快、隔离弱;适用场景不同。
32. 云服务器和物理机运维差异?
- 要点:云上关注安全组、快照、弹性伸缩、多可用区;物理机关注硬件、RAID、IPMI、机房。
八、场景与软技能题
33. 半夜收到告警,你的处理流程?
- 要点:确认告警真实性 → 评估影响面 → 止血 → 通报 → 定位 → 恢复 → 记录。体现分级响应和沟通意识。
34. 你做过最有价值的运维优化是什么?
- 要点:用 STAR 讲,量化结果(故障率下降、成本节省、MTTR 缩短),体现主动性和工程化思维。
35. 开发和运维冲突怎么处理?
- 要点:用数据和 SLO 说话、推动标准化和自助化、建立变更流程和回滚机制。
备考建议
-
系统运维面试核心是"排障路径":任何"XX 高/慢/挂了"的题,都按"现象 → 分层排查 → 定位 → 解决 → 预防"回答。
-
准备好 2-3 个真实故障案例:能讲清时间线、你的动作、根因和后续改进。
-
Shell 要能现场手写:日志统计、服务检测、批量操作是高频。
-
注意与传统题结合新趋势:现在系统运维也常被问容器、监控体系(Prometheus)、自动化(Ansible),纯传统岗位越来越少。
二丶答案
一、Linux 基础与内核
1. Linux 启动流程
参考答案:
① 加电自检 BIOS/UEFI → ② 读引导扇区/EFI 分区,加载 GRUB → ③ GRUB 加载内核 vmlinuz 和 initramfs → ④ 内核初始化硬件、挂载根文件系统 → ⑤ 启动 PID 1(systemd)→ ⑥ systemd 按 default.target 启动服务和 getty。
故障对应:GRUB 坏了进 grub rescue;内核 panic 看串口/kdump;initramfs 损坏进 emergency shell;服务起不来用 systemctl status 和 journalctl -xb。
2. 硬链接与软链接
参考答案:硬链接与原文件共享同一 inode,是同一个文件的多个名字,删除一个不影响数据,不能跨文件系统、不能链目录(root 除外),ln src dst。软链接是独立文件,内容存目标路径,可跨分区、可链目录,源删除后变"断链",ln -s src dst。用 ls -li 看 inode 是否相同即可区分。
3. 进程状态与 D 状态
参考答案:R 运行/可运行,S 可中断睡眠,D 不可中断睡眠,T 停止,Z 僵尸。D 状态表示进程卡在内核态等待 IO(磁盘、NFS、驱动),此时信号无法送达,kill -9 也杀不掉。排查:ps -eo pid,stat,wchan,cmd | grep ' D' 看等待点,结合 iostat、dmesg、挂载点是否卡死;解决通常是恢复存储/网络或重启。
4. load average 高但 CPU 不高
参考答案:load 统计的是"运行态 + 不可中断睡眠(D)"的进程数,不只看 CPU。高 CPU 低说明大量进程卡在 IO 等待、swap 抖动或锁竞争。排查顺序:uptime 看 1/5/15 分钟趋势 → vmstat 1 看 r、b、si/so、wa → iostat -x 1 看磁盘 → ps 找 D 状态进程。常见根因:磁盘慢、NFS 挂载异常、内存不足频繁 swap。
5. 内存不足与 OOM Killer
参考答案:内核先回收 page cache、再回收可回收 slab、然后 swap,仍不足触发 OOM Killer,按 oom_score(结合 oom_score_adj)选进程杀掉,日志在 dmesg/journalctl -k。保护关键进程:调低其 oom_score_adj(如 -1000 永不杀)。根治是加内存、限 cgroup 内存、排查内存泄漏。
6. free 的 buff/cache 与可用内存
参考答案:free 列是未使用内存,buff/cache 是内核缓存(可回收),真正该看的是 available。buff 是块设备元数据缓存,cache 是文件页缓存,二者在内存紧张时会被回收,所以"free 很小但 available 充足"是正常的。drop_caches 生产慎用,会瞬间拉低性能。
7. 文件删除但磁盘没释放
参考答案:进程还持有已删除文件的 fd,inode 未释放。排查:lsof +L1 或 lsof | grep deleted 找到 PID,用 > /proc/<pid>/fd/<n> 清空,或重启该进程。预防:日志用 logrotate + copytruncate 或让程序自己 reopen。
8. inode 耗尽
参考答案:df -i 看 inode 使用率。小文件海量场景(mail spool、session、临时文件、缓存目录)耗尽 inode。定位:find / -xdev -type f | awk -F/ '{print $2}' | sort | uniq -c 逐层统计,或用 du --inodes。处理:清理临时/过期文件,合并小文件,必要时重建文件系统调大 inode 数。
二、性能排查
9. CPU 高定位到代码/线程
参考答案:top 找高 CPU 进程 PID → top -Hp <pid> 找线程 TID → printf '%x\n' <tid> 转十六进制 → Java 用 jstack <pid> | grep -A20 <hex> 看栈;C/C++ 用 perf top -p <pid> 或 gdb -p。先 mpstat -P ALL 1 区分是单核跑满还是整体高,pidstat -u 1 看用户态/内核态占比。
10. 磁盘 IO 慢
参考答案:iostat -x 1 看 %util(接近 100 饱和)、await(响应时间)、r/s w/s、avgqu-sz(排队)。iotop -o 找高 IO 进程。深入用 blktrace/biolatency(bcc)看 IO 延迟分布。常见根因:数据库慢查询/全表扫、日志刷盘、swap、RAID 卡写策略(WB/WT)、文件系统碎片、云盘 IOPS 上限。
11. 网络丢包
参考答案:分段定位------ping 看本地到网关,mtr 看逐跳丢包;netstat -s | grep -i drop、nstat -az 看协议栈丢包计数(如 TcpExtTCPBacklogDrop、UdpRcvbufErrors);ss -ti 看重传和拥塞窗口;tcpdump 抓包确认收发是否对称。排查方向:网卡/驱动、ring buffer、防火墙 conntrack 满、MTU 分片、交换机/对端限速、连接数超限。
12. 服务器变慢完整排查
参考答案:按层走------
① uptime 看负载趋势;② top/htop 看 CPU、内存、进程;③ vmstat 1 看 r/b、si/so(swap)、cs(上下文切换);④ iostat -x 1 看磁盘;⑤ ss -s、netstat -s 看连接和协议栈;⑥ dmesg -T 看硬件/内核报错;⑦ 看应用日志、慢查询、GC 日志。结论要落到"哪一层是瓶颈 + 证据"。
13. TIME_WAIT 优化
参考答案:TIME_WAIT 出现在主动关闭方,持续 2MSL,属正常状态,过多才需优化。手段:应用层用连接池/长连接减少短连接;net.ipv4.tcp_tw_reuse=1(仅对 outgoing 且时间戳开启时安全);调小 tcp_fin_timeout;tcp_max_tw_buckets 调大只是掩盖问题。不要开 tcp_tw_recycle(NAT 环境有坑,已废弃)。
14. 单机最大 TCP 连接数
参考答案:理论上受四元组数量限制,服务端单端口监听可支撑数十万到百万连接。实际瓶颈:文件描述符(ulimit -n、fs.file-max)、内存(每连接内核缓冲区)、net.ipv4.ip_local_port_range(主动连接方端口数约 6 万)、somaxconn、conntrack 表大小。优化:调大 fd、端口范围、somaxconn、tcp_mem,用多 IP/多端口扩展。
三、服务与中间件
15. Nginx 常见故障
参考答案:先 nginx -t 验配置,nginx -s reload 看是否生效。看 error.log:
-
502:后端不可达/被拒/超时,查 upstream 健康、后端进程、防火墙;
-
504:后端处理超时,调
proxy_read_timeout或查后端慢; -
413:
client_max_body_size太小; -
499:客户端主动断开,多为后端慢导致前端等不及;
-
端口占用:
ss -lntp查冲突。监控用
stub_status或 nginx-prometheus-exporter 看活跃连接、QPS。
16. Nginx 限流与负载均衡
参考答案:限流用 limit_req_zone(漏桶,burst + nodelay 控制突发)和 limit_conn_zone(并发连接数),可配合 limit_req_status 429。负载均衡 upstream 支持轮询、weight 加权、ip_hash、least_conn、hash $key;健康检查开源版为被动(max_fails/fail_timeout),主动检查用商业版或 OpenResty/nginx-plus。
17. MySQL 连接数打满
参考答案:show processlist 看连接来源和状态(大量 Sleep 说明连接池泄漏或未复用;大量 Query 说明慢查询堆积);show status like 'Threads_connected'、Max_used_connections。排查慢查询(slow log、performance_schema)、锁等待、应用连接池 maxActive 是否过大、wait_timeout 是否过长。处理:kill 异常连接、优化慢 SQL、调 max_connections(需评估内存)、上连接池/代理(ProxySQL)。
18. Redis 内存满
参考答案:先看 maxmemory 和 maxmemory-policy(noeviction 会写失败,allkeys-lru/volatile-lru 等会淘汰)。排查大 key:redis-cli --bigkeys、MEMORY USAGE key;热 key 用 --hotkeys(需 LFU)。处理:清理过期 key(SCAN + UNLINK)、拆分大 key、设合理 TTL、扩容或分片(Cluster)、冷热分离。注意 RDB/AOF 重写时的内存放大。
19. 消息队列消费堆积
参考答案:先看 lag 指标和消费速率。手段:增加消费者实例/提升消费线程数(受分区数限制,Kafka 需扩分区)、优化消费逻辑(批量、异步、去掉同步阻塞)、排查下游依赖(DB/接口慢)、检查 rebalance 频繁(max.poll.interval.ms、会话超时)。应急:临时扩容消费者、跳过非核心消息、降级。RabbitMQ 看队列深度和 unacked,注意 prefetch 设置。
四、Shell 与自动化
20. 端口存活检测 + 自动拉起 + 告警脚本
参考答案(可直接复述思路):
bash
#!/bin/bash
PORT=8080
LOG=/var/log/check_port.log
LOCK=/tmp/check_port.lock
exec 9>$LOCK
flock -n 9 || exit 0 # 防并发
if ! ss -lnt | grep -q ":$PORT "; then
echo "$(date) port $PORT down, restarting" >> $LOG
systemctl restart myapp
sleep 3
if ! ss -lnt | grep -q ":$PORT "; then
curl -s -X POST "$WEBHOOK" -d "host=$(hostname) port=$PORT still down"
echo "$(date) restart failed" >> $LOG
fi
fi
要点:flock 防并发、重启后二次校验、失败才告警(防误报)、日志留痕、用 systemd 托管更稳。
21. 日志 IP Top10
参考答案:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10。变体:统计状态码 awk '{print $9}' | sort | uniq -c | sort -rn;按小时统计 awk -F'[][]' '{print $2}' | cut -d: -f1-2。
22. 批量多机执行
参考答案:首选 Ansible:ansible all -i inventory -m shell -a "uptime" -f 10(-f 并发),复杂用 playbook(幂等、handler、roles)。无 Ansible 时用 for 循环 + SSH 免密,但要处理失败(set -e 慎用)、超时(ssh -o ConnectTimeout)、并发(xargs -P)。强调幂等、失败重试、结果汇总。
23. crontab 不执行排查
参考答案:① systemctl status crond 服务是否在跑;② /var/log/cron 看有没有触发记录;③ 环境变量差异------cron 的 PATH 很短,脚本里用绝对路径、显式 source 环境;④ 脚本权限和 shebang;⑤ 输出重定向到日志(>> /tmp/x.log 2>&1)看报错;⑥ % 在 crontab 里要转义;⑦ SELinux 限制。调试技巧:把命令写成 * * * * * /bin/bash /path/x.sh 并加日志。
五、安全加固与合规
24. Linux 安全加固
参考答案:① 最小化安装,卸载无用包、关无用服务/端口;② SSH 加固:禁 root 登录、密钥认证、改端口、AllowUsers、失败锁定(fail2ban);③ 防火墙 firewalld/iptables 默认拒绝;④ 账号:删默认账号、强密码策略、sudo 最小授权、/etc/passwd 权限;⑤ 日志审计 auditd、rsyslog 集中收集;⑥ 补丁与基线扫描(OpenSCAP);⑦ 文件权限、SUID 排查;⑧ 内核参数加固(sysctl:禁 IP 转发、开 SYN cookie、禁 ICMP 重定向)。
25. 堡垒机与运维审计
参考答案:堡垒机是所有运维访问的统一入口,做身份认证(对接 LDAP/MFA)、权限管控(按资产/账号授权)、命令审计与录屏、会话阻断(高危命令拦截)、满足等保"访问控制+安全审计"要求。配合 CMDB 管资产、审批流管临时提权、日志留存 ≥6 个月。
26. 防误操作
参考答案:制度+技术双管:生产禁 root 直连、用普通账号+sudo 白名单;危险命令别名确认(alias rm='rm -i')、safe-rm 或 trash 机制;rm -rf 前先 ls 确认、变量加引号;变更走审批和灰度;重要操作前备份/快照;用 set -u 防未定义变量;有条件的用 IaC 替代手工。
六、高可用与稳定性
27. 高可用架构设计
参考答案:核心是消除单点 + 故障自动转移 + 数据冗余 + 容量冗余。分层:接入层 LB 双活(LVS/Keepalived 或云 SLB);应用层多实例无状态 + 健康检查;数据层主从/集群 + 定期备份;机房级多可用区/异地容灾;配套监控告警、故障演练(混沌工程)、预案和回滚。用 RTO/RPO 衡量。
28. Keepalived 脑裂
参考答案:原因:主备间 VRRP 心跳不通(网线、交换机、防火墙禁 VRRP 协议、网卡故障),双方都认为自己是 master,出现双 VIP。防护:双心跳线/多播+单播结合、vrrp_script 检测业务端口(业务挂了也降级)、仲裁(ping 网关或第三方)、STONITH 强制隔离、nopreempt 防抢占抖动。发现后先确认哪台该持有 VIP,隔离一台再修网络。
29. 备份策略
参考答案:遵循 3-2-1(3 份、2 种介质、1 份异地)。全量+增量/差异结合,数据库用物理备份(xtrabackup)+ binlog 做 PITR。明确 RPO/RTO 决定频率。关键:定期做恢复演练,备份不验证等于没有;加密传输存储、权限隔离、防勒索(离线/不可变备份)。
30. 线上故障处理流程
参考答案:① 确认与定级(影响面、是否 P0);② 止血优先------回滚、切流、扩容、重启、降级,先恢复业务;③ 通报------拉群、同步进展、通知相关方;④ 定位根因(此时再查日志/监控/变更记录);⑤ 恢复验证(指标、业务功能);⑥ 复盘------时间线、5Why、Action Item 定人定期限。原则:"先恢复后定位,变更是第一嫌疑"。
七、虚拟化与云
31. 虚拟化与容器
参考答案:虚机通过 Hypervisor 虚拟硬件,每台有独立内核,隔离强、启动慢(分钟级)、资源开销大;容器共享宿主内核,靠 namespace 隔离、cgroup 限额,轻量、秒级启动、密度高,但隔离弱、内核共享有安全风险。虚机适合强隔离/异构 OS,容器适合微服务和弹性伸缩,生产常"虚机/云主机 + 容器"组合。
32. 云服务器与物理机运维差异
参考答案:云上:关注安全组/网络 ACL、快照与镜像、弹性伸缩、多可用区、云监控、按量成本优化、API/ IaC 管理;硬件故障由云厂商兜底。物理机:管硬件(RAID、内存、磁盘)、IPMI/带外、机房网络与电力、备件、固件。云上更强调自动化和成本,物理机更强调硬件和底层。
八、场景与软技能
33. 半夜收到告警的处理流程
参考答案:① 先确认告警真实性(是否误报、是否已恢复);② 快速评估影响面(哪些业务、多少用户、是否核心);③ 止血(回滚最近变更、切流、重启、扩容);④ 在群里通报"已知晓、正在处理、当前影响";⑤ 定位根因;⑥ 恢复后验证并记录;⑦ 次日补复盘。体现分级响应、沟通及时、不盲目操作。
34. 最有价值的运维优化(STAR)
参考答案模板:S 背景(如"大促前订单服务 P99 达 2s,告警频繁")→ T 目标(降到 500ms 内、告警降噪)→ A 动作(加缓存、连接池调优、慢 SQL 治理、加 Prometheus 分层告警)→ R 结果(P99 降 70%、告警量降 80%、MTTR 从 30min 到 5min)。要量化、要体现你主导的部分。
35. 开发与运维冲突
参考答案:本质是目标差异(快 vs 稳)。做法:用 SLO/错误预算把"稳"量化,让数据说话;推动标准化和自助化(CI/CD、平台工具)减少摩擦;建立变更流程和回滚机制,让开发敢发、运维敢放;故障复盘对事不对人;早期介入(DevOps/左移),把运维要求写进需求和架构评审。
附:高频命令速查(答题时可随口带出)
-
CPU/进程:
top、htop、pidstat 1、mpstat -P ALL 1、ps -eo pid,stat,wchan,cmd -
内存:
free -h、vmstat 1、smem、/proc/meminfo -
磁盘:
df -h、df -i、iostat -x 1、iotop -o、lsof +L1 -
网络:
ss -lntp、ss -s、ss -ti、netstat -s、nstat -az、tcpdump -i eth0 -nn port 80、mtr -
日志/内核:
journalctl -xe、dmesg -T、/var/log/messages -
系统:
uptime、systemctl status、lsof -p、strace -py