Linux 运维常见故障排查与处理 33 个技巧汇总 - 夜莺博客

Linux 运维常见故障排查与处理 33 个技巧汇总

Linux 运维中 80% 的故障都是重复出现的:脚本不执行、登录慢、磁盘被日志撑爆、定时任务异常。把这些高频问题的特征和解决办法沉淀成速查清单,是运维工程师效率提升最快的方式。本文汇总了 33 个来自一线项目的 Linux 常见故障排查与处理技巧,覆盖脚本、定时任务、网络、存储、数据库等场景,遇到问题时可以直接对照定位。

脚本与定时任务高频问题

shell 脚本报 ": bad interpreter" 不执行

几乎都是因为在 Windows 下编辑脚本后上传,换行符变成了 ^M。解决:在 Linux 下重写,或用 vi 去掉回车符::%s/^M//g(^M 用 Ctrl+V, Ctrl+M 输入)。排错时可用 sh -x 脚本名 单步执行并回显结果。

crontab 输出撑爆 /var/spool/clientmqueue

cron 中执行的程序有输出时,系统会以邮件形式发给用户,而 sendmail 未启动导致文件堆积,日积月累可达 100G+。解决:直接删除 ls | xargs rm -f;彻底解决是在定时任务后加 >/dev/null 2>&1。

网络与登录类问题

  • telnet/ssh 登录很慢:优先检查 DNS 反向解析——客户端 IP 无法反解时服务端会等待超时,关闭或配置好反解即可。
  • 代理服务器过滤规则不生效:依次检查功能模块是否加载、默认策略是否正确、iptables 语法是否有误、规则顺序是否需要调整。
  • 能访问 Internet 但不能访问 DMZ 区服务:先关闭 iptables 验证,能通说明是规则问题,集中检查过滤规则配置与顺序。

存储与数据库类问题

  • MySQL ibdata1 数据太大:只能通过 dump 导出建库 SQL 再重建的方式回收空间。
  • mysql-binlog 太大:手动清理用 PURGE MASTER LOGS TO 'mysql-bin.010';;或在 my.cnf 设置 expire_logs_days=30 自动清理。
  • 磁盘被日志填满:用 du -sh /* | sort -rh 定位大目录,配置 logrotate 轮转。

内存与 CPU 类故障(第 12-15 条)

  • 业务进程被 OOM Killer 杀掉:用 dmesg -T | grep -i "killed process" 确认被杀进程与当时的可用内存,再用 free -m 区分是真实耗尽还是 page cache 占比高;保护关键进程可调低它的 oom_score_adj。
  • load average 很高但 CPU 空闲:多半是 IO 等待造成的。vmstat 1 看 r/b 两列,iostat -x 1 看 %util 与 await,磁盘长期 100% 时要查的是存储而不是 CPU。
  • CPU 被单个进程打满却不知道在做什么:先 top -H -p PID 找到最耗 CPU 的线程,再用 perf top -p PID 或 Java 的 jstack PID 对照 nid 定位到具体函数。
  • 出现大量僵尸进程(defunct):僵尸本身不占资源但会耗尽 PID,ps -ef | grep defunct 找到父进程,修复或重启父进程后由 init 回收。

磁盘、inode 与文件系统类故障(第 16-20 条)

  • df 显示有空间却写不进去:先看 df -i,inode 被海量小文件耗尽同样会报 No space left on device,常见元凶是 session 文件与邮件队列。
  • df 与 du 统计结果对不上:说明有文件被删除但仍被进程持有,lsof | grep deleted 找到 PID 后重启服务空间才会释放,这是"删了文件空间不出来"的头号原因。
  • 根分区被日志撑满:du -sh /* 2>/dev/null | sort -rh | head 逐级定位大目录,长期方案是配置 logrotate 的 daily、maxsize、rotate 与 compress。
  • 原目录容量被"盖住":mount | grep /data 检查是否有新文件系统挂载覆盖了原目录,umount 之后容量立刻恢复。
  • 文件系统变成只读:内核检测到文件系统错误会自动 remount ro,dmesg | grep -i remount 可确认;先备份数据,再在业务低峰执行 fsck -y,不要带着故障改 fstab。

SSH、登录与权限类故障(第 21-24 条)

  • ssh 登录慢约 30 秒:sshd 默认开启 UseDNS 反向解析,客户端 IP 不可反解时会等到超时,设置 UseDNS no 与 GSSAPIAuthentication no 即可。
  • Permission denied (publickey):依次确认 ~/.ssh 目录 700、authorized_keys 文件 600、属主正确、SELinux 上下文正常(restorecon -Rv ~/.ssh),再用 ssh -vvv 看认证协商过程。
  • 提示 Too many open files:ulimit -n 查看当前限制,永久生效要同时改 limits.conf 的 nofile 和 systemd 单元的 LimitNOFILE,只改一处往往不生效。
  • sudo 报 unable to resolve host:/etc/hosts 缺少本机主机名映射,补一行 127.0.0.1 $(hostname) 即可,不影响功能但会拖慢每次 sudo。

服务、systemd 与包管理类故障(第 25-28 条)

  • systemctl start 失败看不到原因:标准两步是 systemctl status 服务 -l 加 journalctl -u 服务 -n 100 --no-pager;反复崩溃的服务用 --since 缩小时间窗口。
  • 开机不自启:systemctl is-enabled 服务 确认状态,被 mask 的服务必须先 systemctl unmask 再 enable,改完单元文件要执行 daemon-reload。
  • 端口被占用导致服务起不来:ss -lntp | grep 8080 或 lsof -i:8080 找到占用进程,大量 TIME_WAIT 导致 bind 失败时再检查 tcp_tw_reuse 参数。
  • yum/apt 报锁被占用:确认没有活跃进程后再删除 /var/run/yum.pid 或 dpkg 锁;依赖冲突先 yum clean all && yum makecache 刷新元数据。

时间、日志与内核类故障(第 29-33 条)

  • 时间漂移引发证书与定时任务异常:timedatectl 看同步状态,chronyc sources -v 看上游源是否可达,123/UDP 被防火墙拦截是最常见原因。
  • 日志时间与本地时间差 8 小时:容器或应用使用 UTC 而宿主机用 CST,统一设置 TZ=Asia/Shanghai,不要靠修改宿主机时区掩盖问题。
  • messages 里刷 disk error:属于硬件级告警,smartctl -a /dev/sda 重点看 Reallocated_Sector_Ct,数值持续增长就直接安排换盘。
  • 内核模块加载失败:报 Unknown symbol 一般是内核版本不匹配,用 uname -r 与 modinfo 模块 对比 vermagic 后重装对应版本的模块包。
  • dmesg 里 connection tracking table full:连接跟踪表满会直接导致新建连接失败,调大 nf_conntrack_max 并排查是否有异常短连接风暴。

把 33 条串成固定排查流程

清单的价值在于"先查表、再动手",但日常更高效的做法是按固定顺序过一次全局,再进入具体条目:

uptime; free -m; df -h; df -i          # 一、负载/内存/磁盘/inode 全局状态
ps aux --sort=-%cpu | head             # 二、谁在吃 CPU
ps aux --sort=-rss  | head             # 三、谁在吃内存
ss -lntp; systemctl --failed           # 四、监听端口与启动失败的服务
journalctl -p err -n 50 --no-pager     # 五、最近的错误日志
ip -br a; ip r; ping -c 3 网关         # 六、网络连通性与路由

前两步能定位绝大多数资源类故障,第三步开始进入配置与服务层面。网络方向建议配合 ethtool 网卡诊断指南 与 sysctl 内核网络参数调优;磁盘告警参考 smartctl 与 smartd 磁盘健康监控,空间不足参考 LVM 精简卷与快照实战。

系统安装与硬件类问题

安装时找不到硬盘——进 BIOS 把硬盘设置为兼容模式;分区完成后无法继续安装——通常忘记创建根分区或 swap 交换分区。这类"初始状态"问题在装机自动化时最容易被忽略。

使用建议

这份清单的价值在于"先查表、再动手":遇到故障先对照特征找到对应条目,再按步骤验证,避免凭感觉乱试。配合 Linux 运维高阶命令实战指南 和 Linux 性能排障工具与命令 可以覆盖更完整的排查场景,时间同步类问题参考 Chrony 时间同步排障。

原文链接:https://blog.csdn.net/u011001084/article/details/79419721