一、故障描述
突然发现某云主机无法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