Linux运维你处理过什么故障
Linux运维你处理过什么故障详细介绍
在 Linux 运维中,处理过的故障类型涵盖系统启动、服务异常、性能瓶颈、网络故障、存储问题等多个方面。以下是一些典型故障案例及处理思路:
一、系统无法启动或启动异常
1.
引导文件损坏(如 GRUB 引导失败)
- 现象:服务器开机后停留在 GRUB 命令行,或提示 “missing /boot/vmlinuz” 等错误。
- 常见原因:内核更新失败、误删引导文件、磁盘分区表损坏。
- 处理步骤:
- 进入救援模式(通过启动盘或 KVM 控制台)。
- 修复 GRUB 引导:
grub-install /dev/sda并重建配置文件grub-mkconfig -o /boot/grub/grub.cfg。 - 检查内核文件是否存在,若缺失则从备份恢复或重新安装内核。
- 预防:定期备份
/boot目录,更新内核前做好版本保留。
2.
磁盘故障(RAID 阵列降级)
- 现象:系统启动缓慢,日志中出现 “Failed to start /dev/sda” 或 RAID 卡报警。
- 常见原因:物理磁盘损坏、RAID 控制器故障。
- 处理步骤:
- 通过
smartctl检查磁盘健康状态,确认故障盘。 - 更换故障磁盘,通过 RAID 管理工具(如
mdadm)重建阵列。 - 若数据丢失,使用备份恢复(如
rsync、快照)。
- 通过
- 预防:配置磁盘 SMART 监控,定期巡检 RAID 状态。
二、服务异常或崩溃
1.
服务无法启动(如 HTTP 服务、数据库服务)
- 现象:
systemctl start httpd报错,或服务启动后立即退出。 - 常见原因:端口冲突、配置文件错误、依赖缺失、资源限制(如内存不足)。
- 处理步骤:
- 查看服务日志(如
journalctl -u httpd)定位错误信息。 - 检查端口占用:
netstat -tunlp | grep 80,释放冲突端口。 - 验证配置文件语法(如
httpd -t),修复语法错误或参数配置问题。 - 若因内存不足,调整
/etc/security/limits.conf或扩容内存。
- 查看服务日志(如
- 预防:使用容器(如 Docker)隔离服务环境,配置服务健康检查脚本。
2.
服务运行缓慢或假死
- 现象:请求响应超时,CPU / 内存使用率异常高。
- 常见原因:进程死锁、资源竞争、代码漏洞(如内存泄漏)。
- 处理步骤:
- 通过
top/htop定位高资源占用进程,结合strace分析系统调用阻塞点。 - 检查数据库慢查询(如 MySQL 的
slow_query_log),优化 SQL 语句或索引。 - 若为程序 BUG,重启服务并联系开发团队修复,临时通过负载均衡分流请求。
- 通过
- 预防:部署 APM 工具(如 Prometheus+Grafana)实时监控服务性能。
三、性能瓶颈问题
1.
CPU 使用率长期过高
- 现象:
top显示%CPU持续高于 80%,系统响应卡顿。 - 常见原因:进程死循环、大量计算任务、内核参数配置不合理。
- 处理步骤:
- 用
top/pidstat定位 CPU 占用最高的进程 / 线程。 - 分析进程行为:若为用户进程,检查代码逻辑;若为内核态,通过
perf分析内核函数调用。 - 限制进程资源(如通过
cgroups设置 CPU 配额),或横向扩展服务实例。
- 用
- 预防:设置 CPU 使用率报警阈值,定期进行性能压测。
2.
内存不足(Swap 频繁使用)
- 现象:
free -h显示swap占用高,dmesg出现 “Out of memory (OOM)” 日志。 - 常见原因:缓存配置不当、进程泄漏内存、服务并发量超过内存容量。
- 处理步骤:
- 识别内存泄漏进程:
ps aux --sort -rss,结合pmap <pid>查看内存映射。 - 调整系统缓存参数(如
vm.swappiness),限制 Swap 使用策略。 - 增加物理内存,或优化服务内存占用(如减少缓存大小)。
- 识别内存泄漏进程:
- 预防:禁用不必要的服务,配置 OOM Killer 保护关键进程。
四、网络故障
1.
网络不通(主机间无法 Ping 通)
- 现象:跨网段访问失败,
ping显示 “Destination Host Unreachable”。 - 常见原因:防火墙规则错误、路由配置缺失、NAT 设置异常、网卡故障。
- 处理步骤:
- 检查本地防火墙:
iptables -L或firewalld-cmd --list-all,放行必要端口。 - 验证路由表:
route -n或ip route,添加缺失的静态路由。 - 测试网卡状态:
ethtool eth0检查链路状态,重启网卡或交换机端口。
- 检查本地防火墙:
- 预防:使用
netcheck脚本定期巡检网络配置,分段隔离业务流量。
2.
网络吞吐量低(上传 / 下载速度慢)
- 现象:文件传输速率远低于带宽上限,
iftop显示带宽利用率低。 - 常见原因:TCP 参数配置不当(如 MSS/MTU)、网卡多队列未启用、交换机端口限速。
- 处理步骤:
- 调整 TCP 优化参数:
/etc/sysctl.conf中设置net.ipv4.tcp_window_scaling等。 - 启用网卡多队列:
ethtool -L eth0 combined 8,提升多核处理效率。 - 检查交换机端口配置,确保速率和双工模式匹配(如强制 1Gbps 全双工)。
- 调整 TCP 优化参数:
- 预防:使用
iperf进行网络性能测试,定期更新网卡驱动。
五、存储相关故障
1.
文件系统只读(Read-only file system)
- 现象:写入文件时报错 “Read-only file system”,
df -h显示文件系统为只读状态。 - 常见原因:磁盘空间满、文件系统一致性错误、硬件故障导致磁盘只读。
- 处理步骤:
- 清理垃圾文件:删除临时文件(如
/tmp、/var/log中过期日志),释放空间。 - 检查文件系统错误:卸载分区后执行
fsck -f /dev/sda1,修复元数据错误。 - 若因硬件故障,切换到备用路径或挂载新存储。
- 清理垃圾文件:删除临时文件(如
- 预防:设置磁盘空间使用率报警(如超过 80% 触发通知),定期执行
fsck。
2.
inode 耗尽
- 现象:创建文件时报错 “Cannot create file: No space left on device”,但
df -h显示空间充足。 - 常见原因:大量小文件(如日志碎片、临时文件)占用 inode。
- 处理步骤:
- 查找高 inode 目录:
df -i定位满 inode 的分区,find /path -type f | wc -l统计文件数量。 - 删除无用小文件(如
find /tmp -type f -mtime +7 -delete),或清理软链接 / 硬链接。 - 若分区设计不合理,可考虑重新格式化时调整 inode 数量(
mkfs.ext4 -N <number> /dev/sda1)。
- 查找高 inode 目录:
- 预防:定期巡检
df -i,限制用户目录下的文件数量。
六、安全事件
1.
恶意进程 / 挖矿程序
- 现象:CPU 使用率异常高,出现陌生进程(如
xmr-stak、ddgs),或系统日志被删除。 - 常见原因:弱密码登录、漏洞利用、恶意软件植入。
- 处理步骤:
- 断开服务器网络连接,防止横向扩散。
- 终止恶意进程:
kill -9 <pid>,并删除相关文件(需确认路径,避免误删)。 - 扫描系统:使用
rkhunter/chkrootkit检测 rootkit,更新系统补丁,重置所有用户密码。
- 预防:禁用 root 直接登录,使用 SSH 密钥认证,部署入侵检测系统(如 Snort)。
2.
权限异常(文件 / 目录权限被篡改)
- 现象:用户无法访问文件,或关键配置文件权限变为 777。
- 常见原因:误操作、恶意程序修改、自动化脚本错误。
- 处理步骤:
- 对比正常服务器的权限模板,恢复关键目录权限(如
chmod 755 /etc,chmod 644 /etc/passwd)。 - 检查最近操作日志:
last查看登录记录,history分析用户命令。 - 启用文件完整性监控(如 AIDE),实时检测权限变更。
- 对比正常服务器的权限模板,恢复关键目录权限(如
- 预防:定期备份权限配置,限制普通用户写入系统目录。
七、配置错误导致的连锁故障
1.
内核参数错误(如 TCP 端口耗尽)
- 现象:服务报错 “Cannot assign requested address”,
netstat -s显示大量out of port错误。 - 常见原因:
/etc/sysctl.conf中net.ipv4.ip_local_port_range配置过小,或fs.file-max限制过低。 - 处理步骤:
- 调整端口范围:
sysctl -w net.ipv4.ip_local_port_range="1024 65535"(永久生效需写入配置文件)。 - 增加文件句柄限制:
ulimit -n 65535,并修改/etc/security/limits.conf。
- 调整端口范围:
- 预防:参考性能优化最佳实践配置内核参数,变更前备份配置文件。
2.
Nginx/Ubuntu 版本兼容性问题
- 现象:升级 Nginx 后反向代理失效,报错 “unknown directive”。
- 常见原因:模块版本不兼容,或依赖的系统库缺失。
- 处理步骤:
- 回退到上一版本:通过包管理工具(如
apt)卸载当前版本,安装兼容版本。 - 手动编译 Nginx 时指定模块路径,确保依赖库(如
libpcre3、zlib1g-dev)已安装。
- 回退到上一版本:通过包管理工具(如
- 预防:在测试环境验证升级方案,使用容器化部署隔离环境差异。
处理故障的核心思路
- 备份优先:任何操作前确认是否有可用备份(如快照、异地备份),避免故障扩大。
- 最小变更原则:每次排查只修改一个变量,逐步定位问题根源。
- 日志为王:通过
journalctl、服务专属日志、内核日志(dmesg)获取关键线索。 - 工具链熟练:掌握
top/htop/vmstat/tcpdump等基础工具,结合自动化脚本(如 Python、Shell)批量分析数据。 - 预案演练:针对高频故障(如服务崩溃、磁盘故障)制定应急预案,定期进行故障恢复演练。
通过系统性的监控、预防性维护和快速响应机制,可以大幅降低故障发生概率及恢复时间。