Linux系统宕机故障排查及原因分析

本文详细介绍了Linux系统宕机故障的排查过程,重点分析了由于soft lockup错误导致的CPU停滞问题。通过检查系统日志、dmesg、磁盘性能等,探讨了内核软死锁的原因,包括CPU负载、IO性能、磁盘错误等,并提供了相关的检查命令和解决方案。此外,还提到了watchdog机制在故障检测中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、故障描述

突然发现某云主机无法ssh,业务线宕机,虽然主机处于开机状态,但是管理console VNC无法连入,无法ping通地址,云主机被判定为宕机。一般宕机原因有如下:

  • 内存或者CPU爆满,导致服务器OOM(内存泄漏会间接导致CPU争抢),或系统守护进程(如systemd)无法获得CPU时间,导致服务崩溃,服务器重启
  • 硬件导致重启:如thermal: CPU0: Critical temperature reached。
  • 极端负载下,内核调度或驱动可能出现Bug,导致系统崩溃如:kernel panic或segment error

在这里插入图片描述

另外,当系统宕机重启时,还会造成时间服务异常,从而日志轮转或归档异常(旧日志文件被错误覆盖或轮转),日志记录里会显示时间错乱的记录;

二、排查过程

在这里插入图片描述

1)查看宕机记录

last -F |grep carsh

last reboot //查看主机起来的时间
last reboot -n 5  #最近5次的重启时间

journalctl --list-boots  //查看最近重启的时间/事件
  0 ca01e984cdb442d98f5453ebb5ca4301 Sat 2024-07-06 02:30:09 CST—Mon 2024-11-25 15:40:10 CST
journalctl -xe --boot=ID #上面的id
dmesg -T            # 内核日志,检查硬件错误或过热警告
journalctl -b -n 50
journalctl -k -n 50
journalctl -b -3  #显示特定启动的日志(例如第3次启动)
journalctl -e -b=-1 -p 3  # p后跟不同的日志等级,emerge alert crit error waring..
journalctl --reverse  #按时间顺序从旧到新显示日志
journalctl --reverse --no-pager  #按时间顺序从新到旧显示日志;默认情况下,journalctl 就会按时间顺序显示日志,从最近的条目开始。
journalctl -u myservice.service --since "1 hour ago"  #显示特定服务的最近1小时日志
journalctl --since "yesterday"  #显示昨天的日志
journalctl --since "1 hour ago"  #显示最近1小时的日志
journalctl -b -1 --since "2025-03-18 00:00:00"| fold -w 80 -s   # 查看上一次启动的日志(宕机前),将日志输出的宽度限制为80个字符,并且只在空格处换行
journalctl --since "2025-03-18 00:00:00" --until "2025-03-18 23:59:59"
journalctl --until "2024-01-01 00:00:00"
journalctl --since "2024-01-01 00:00:00"
journalctl -b -1 --since "2025-02-20 14:41:00”--until "2025-03-18 10:50:00" | egrep -i "error |warning|failed"|less

grep -i "error\|panic\|overheat" /var/log/syslog

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 上图这个错误表明尝试加载nf_conntrack内核模块时失败了,原因是参数无效。nf_conntrack是用于网络连接跟踪的内核模块,它对于某些网络功能(如NAT)是必需的。潜在原因:
    内核版本不支持加载该模块的参数。
    模块依赖的其他模块未加载。
    模块文件损坏或不兼容当前内核版本。
    排查修复:
    确认当前内核版本是否支持nf_conntrack模块。
    检查是否有其他依赖模块需要先加载。
    \
  • 启动时加载的rngd是一个守护进程,属于rng-tools软件包的一部分,它的作用是使用环境噪声和硬件随机数生成器来生成熵。这个服务会检查是否有充分的随机性源来提供数据,并将其存储到内核的随机数熵池(random-number entropy pool)中,这个随机数熵池是用于生成/dev/random和/dev/urandom字符设备的基础。/dev/urandom提供标准质量的随机数,而/dev/random提供高质量随机数,但在缺乏熵时会停止工作。rngd服务通过收集熵来帮助维持这些设备的正常工作.
  • RDSEED和RNG是与随机数生成相关的指令和设备。RDSEED是一种CPU指令,用于生成随机数,它是Intel的数字随机数生成器(DRNG)的一部分。RNG(Random Number Generator)是生成伪随机数的机制,这些伪随机数可以用于生成SSH密钥、进程随机PID、TCP序列号以及UUID等

在这里插入图片描述

Stopped target Timer Units:表示所有定时器服务已经停止。定时器服务用于安排任务在特定时间执行,当所有定时器任务完成后,这些单元会被停止。
Stopped target Path Units:表示所有路径单元已经停止。路径单元用于监控文件系统中的特定路径,当系统启动完成后,这些监控不再需要,因此单元被停止。
Stopped target Remote File Systems:表示所有远程文件系统相关的服务已经停止。这可能是因为本地文件系统已经挂载完成,不再需要远程文件系统。
Stopped target Slice Units:表示所有资源切片单元已经停止。资源切片用于对系统资源进行分组和限制,当系统启动完成后,这些切片不再需要。
Stopped target Socket Units:表示所有套接字单元已经停止。套接字单元用于监听网络连接,当所有网络服务启动完成后,这些监听不再需要。
Stopped target System Initializat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值