0

0

Linux 复杂系统故障的拆解思路

冷漠man

冷漠man

发布时间:2026-02-11 19:36:28

|

519人浏览过

|

来源于php中文网

原创

系统级故障排查应优先使用dmesg和journalctl -b:dmesg提供内核环形缓冲区原始消息,journalctl -b覆盖从init到服务启动的完整日志链,二者可发现磁盘I/O卡死、驱动加载失败等底层问题。

linux 复杂系统故障的拆解思路

dmesgjournalctl -b 开始,而不是直接查应用日志

系统级故障往往不是应用报错导致的,而是底层资源或驱动先出问题。比如磁盘 I/O 卡死、内核模块加载失败、电源管理异常——这些在应用日志里根本不会体现。dmesg 能看到内核 ring buffer 的第一手消息,journalctl -b 则覆盖了从 init 启动到各服务拉起的完整链条。

实操建议:

  • 优先运行 dmesg -T | tail -50(带时间戳,看最近 50 行),注意 Hardware ErrorWARNINGunable to handle kernel NULL pointer dereference 这类关键词
  • journalctl -b -p 3 只看 error 级别日志;若怀疑是某次重启后变差,用 journalctl -b -1 查上一次启动
  • 别跳过 journalctl -u systemd-udevdjournalctl -u systemd-journald——udev 规则错配、journald 自身卡住都会导致日志“消失”或延迟

strace 抓住“卡住但不报错”的进程

很多故障表现为服务响应慢、连接超时、命令 hang 住,但 ps aux 显示进程还在 running 状态。这时候 strace 是最直接的诊断工具,它能告诉你进程到底卡在哪条系统调用上。

常见错误现象:

  • HTTP 服务突然大量 502,curl -v 却显示 TCP 连接成功但无响应 → 很可能是 accept()read() 阻塞
  • ls /mnt/nfs 卡住 → strace ls /mnt/nfs 通常会停在 stat()getdents64(),指向 NFS server 不可达或防火墙拦截了 portmap
  • 数据库客户端连不上,netstat -tnp 看不到连接 → strace -e trace=connect,socket,getaddrinfo psql ... 能确认是 DNS 解析失败还是 connect 被拒绝

注意:strace -p PID 对生产环境负载敏感,避免长时间挂载;更轻量的方式是加 -e trace=%network-e trace=epoll_wait,select 缩小范围。

lsofss 联合排查资源耗尽型故障

文件描述符、socket 连接数、内存映射页这些资源不是“用完才报错”,而是先行为异常:进程 fork 失败、open() 返回 EMFILE、TCP 连接堆积在 TIME_WAITSYN_RECV。单靠 freedf 完全看不出问题。

无线网络修复工具(电脑wifi修复工具) 3.8.5官方版
无线网络修复工具(电脑wifi修复工具) 3.8.5官方版

无线网络修复工具是一款联想出品的小工具,旨在诊断并修复计算机的无线网络问题。它全面检查硬件故障、驱动程序错误、无线开关设置、连接设置和路由器配置。 该工具支持 Windows XP、Win7 和 Win10 系统。请注意,在运行该工具之前,应拔出电脑的网线,以确保准确诊断和修复。 使用此工具,用户可以轻松找出并解决 WiFi 问题,无需手动排查故障。它提供了一键式解决方案,即使对于非技术用户也易于使用。

下载

实操建议:

  • 查 fd 泄漏:lsof -n -p PID | wc -l 对比 cat /proc/PID/limits | grep "Max open files"
  • 查连接状态分布:ss -s 给出全局统计;ss -tan state time-wait | wc -l 看 TIME_WAIT 数量是否远超正常(如 >65535)
  • 查谁占着端口但没进程名:ss -tulpn | grep ':80',如果 pid/program 列为空,说明 socket 被内核保留(如 SO_REUSEPORT 场景)或权限不足无法读取
  • 注意 lsof +D /path 在大目录下极慢,等价但更快的是 find /path -xdev -type f -links +1 2>/dev/null | head -20(找硬链接异常)

别信 top 的 CPU%,用 perf toppidstat -w 看真实瓶颈

top 显示 CPU 使用率高,不代表程序逻辑有问题——可能只是频繁上下文切换、缺页中断、锁竞争或软中断(softirq)占满一个核。这种情况下优化代码毫无意义,得调内核参数或改硬件中断亲和性。

使用场景与差异:

  • perf top -p PID 能定位到具体函数或指令热点(比如 __do_softirq 占 90%),说明网卡收包处理压垮了 CPU
  • pidstat -w 1 关注 cswch/s(每秒自愿上下文切换)和 nvcswch/s(非自愿)。若后者远高于前者,大概率是锁争用或 CPU 时间片被抢
  • cat /proc/interrupts 配合 watch -n1 'cat /proc/interrupts | grep eth0',观察某网卡中断是否集中在单个 CPU 上(导致该核 100%,其他核空闲)
  • 注意 perf 默认采样频率是 4000Hz,生产环境建议降为 perf top -F 99 避免干扰,且需确保 /proc/sys/kernel/perf_event_paranoid ≤ 2

复杂点在于:很多故障是多个层叠加的结果——比如 NFS 挂载点卡住,既可能源于远端存储响应慢(strace 显示 read() 阻塞),也可能是本地 TCP 窗口缩为 0(ss -iwscalercv_space),还可能是内核 NFS client bug 导致重传逻辑异常。拆解时必须一层层剥,不能只盯最后一行错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

243

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

685

2024.03.01

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

450

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

179

2023.10.30

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

409

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

586

2023.08.10

2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

68

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.9万人学习

Git 教程
Git 教程

共21课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号