Linux常见故障:排查思路与错误分析指南

引言

当Linux系统"生病"时,它不会说话但却会通过各种症状"求救"🆘!本文将带你建立系统化的故障排查思维,从磁盘到内存,从网络到服务,全方位掌握Linux系统的"把脉问诊"技巧。无论遇到多么诡异的系统问题,这篇文章都会成为你的"急诊手册"!准备好你的终端,让我们一起成为Linux系统的"全能医生"吧~ 🚑

故障排查
系统检查
资源分析
日志追踪
工具验证

一、系统级故障排查框架

1.1 通用排查流程

  1. 现象确认:明确故障表现(服务不可用、性能下降、报错信息等)
  2. 日志分析:检查系统日志(/var/log/)和应用日志
  3. 资源监控:查看CPU、内存、磁盘、网络使用情况
  4. 隔离定位:通过排除法确定问题组件
  5. 复现测试:尝试复现问题以确认根本原因

1.2 常用诊断命令

# 系统状态概览
uptime              # 负载情况
dmesg | tail        # 内核日志
journalctl -xe      # 系统日志(systemd系统)# 资源快速检查
top                 # 动态资源监控
df -h               # 磁盘空间
free -h             # 内存使用
ss -tulnp           # 网络连接

二、磁盘相关故障

2.1 常见磁盘错误

  • “No space left on device”:磁盘空间不足
  • “Input/output error”:磁盘I/O错误
  • “Read-only file system”:文件系统变为只读
  • “Disk quota exceeded”:磁盘配额超限

2.2 排查步骤

# 1. 检查磁盘空间
df -h                # 查看各分区使用率
df -i                # 检查inode使用情况# 2. 查找大文件
du -sh /*            # 查看根目录下各目录大小
find / -type f -size +100M -exec ls -lh {} + | sort -rh# 3. 检查文件系统错误
sudo fsck /dev/sda1  # 需要先umount# 4. 检查磁盘健康(SMART)
sudo smartctl -a /dev/sda# 5. 检查挂载选项
mount | grep /dev/sda1
cat /etc/fstab

2.3 解决方案

  • 空间不足

    # 清理日志/缓存
    sudo journalctl --vacuum-size=100M  # 限制日志大小
    sudo apt clean       # Debian/Ubuntu清理包缓存# 扩容或添加存储
    lvextend -L +10G /dev/vg_data/lv_home  # LVM扩容
    resize2fs /dev/vg_data/lv_home
    
  • 文件系统损坏

    umount /dev/sda1
    fsck -y /dev/sda1
    mount /dev/sda1
    

三、内存相关故障

3.1 常见内存错误

  • “Out of memory”:内存耗尽
  • “Killed process”:OOM Killer终止进程
  • “Cannot allocate memory”:内存分配失败
  • 系统卡顿/交换频繁:内存不足表现

3.2 排查步骤

# 1. 检查内存使用
free -h              # 查看物理内存和交换空间
vmstat 1             # 监控虚拟内存统计# 2. 查看内存占用进程
top                  # 按内存排序(M)
ps aux --sort=-%mem | head# 3. 检查OOM事件
dmesg | grep -i oom  # 查看OOM Killer日志
journalctl -k | grep -i oom# 4. 检查内核参数
sysctl vm.swappiness
cat /proc/sys/vm/overcommit_memory

3.3 解决方案

  • 优化内存使用

    # 调整swappiness
    sudo sysctl vm.swappiness=10# 限制进程内存
    systemctl set-property apache2 MemoryLimit=1G
    
  • 处理内存泄漏

    # 使用valgrind检测
    valgrind --leak-check=yes ./application# 定期重启有内存泄漏的服务
    sudo systemctl restart service_name
    

四、网络相关故障

4.1 常见网络错误

  • “Network is unreachable”:网络不可达
  • “Connection refused”:目标服务未监听
  • “No route to host”:路由问题
  • “Name or service not known”:DNS解析失败
  • 高延迟/丢包:网络质量问题

4.2 排查步骤

# 1. 检查网络配置
ip addr show         # 查看IP地址
ip route show        # 查看路由表
cat /etc/resolv.conf # 检查DNS配置# 2. 测试基本连通性
ping 8.8.8.8         # 测试基础网络
ping google.com      # 测试DNS解析# 3. 检查端口连通性
telnet example.com 80
nc -zv example.com 443# 4. 追踪网络路径
traceroute google.com
mtr google.com       # 更高级的路由追踪# 5. 检查防火墙规则
sudo iptables -L -n  # iptables规则
sudo firewall-cmd --list-all  # firewalld规则

4.3 解决方案

  • DNS问题

    # 检查/etc/resolv.conf
    nameserver 8.8.8.8
    nameserver 1.1.1.1# 测试不同DNS服务器
    dig @8.8.8.8 example.com
    
  • 防火墙阻挡

    # 临时添加规则
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 永久保存规则
    sudo iptables-save > /etc/iptables.rules
    
  • 网络接口问题

    # 重启网络服务
    sudo systemctl restart networking   # Debian/Ubuntu
    sudo systemctl restart NetworkManager # RHEL/CentOS# 检查接口状态
    ethtool eth0
    

五、服务特定故障

5.1 服务启动失败

# 1. 查看服务状态
systemctl status apache2# 2. 查看详细日志
journalctl -u apache2 -xe# 3. 测试配置文件语法
apachectl configtest   # Apache
nginx -t              # Nginx# 4. 检查端口冲突
ss -tulnp | grep :80

5.2 数据库连接问题

# 1. 检查服务状态
systemctl status mysql# 2. 检查错误日志
tail -f /var/log/mysql/error.log# 3. 检查连接限制
show variables like 'max_connections';# 4. 检查网络访问权限
SELECT host, user FROM mysql.user;

六、硬件相关故障

6.1 常见硬件错误

  • “kernel: CPU#0: Possible thermal throttling”:CPU过热
  • “blk_update_request: I/O error”:磁盘I/O错误
  • “EDAC MC0: UE memory read error”:内存错误

6.2 排查命令

# CPU/温度监控
sensors              # 需要安装lm-sensors
mpstat -P ALL 1      # CPU使用率# 内存检测
sudo memtester 1G 1  # 测试1GB内存(需安装memtester)# 磁盘健康
sudo smartctl -a /dev/sda
sudo badblocks -v /dev/sda

七、系统崩溃分析

7.1 内核崩溃(crash)

# 查看内核转储
ls -lh /var/crash/    # Ubuntu
ls -lh /var/core/     # RHEL/CentOS# 分析core dump
gdb /usr/bin/application core-file# 配置kdump(内核转储)
sudo kdump-config show # Debian/Ubuntu

7.2 系统日志分析

# 查看关键错误
grep -i error /var/log/syslog
journalctl -p 3 -xb  # 显示错误级别及以上日志# 按时间筛选
journalctl --since "2023-01-01" --until "2023-01-02"

八、性能问题排查

8.1 CPU瓶颈

# 1. 查看CPU负载
top
htop# 2. 分析热点进程
perf top# 3. 追踪系统调用
strace -p <PID> -c

8.2 I/O瓶颈

# 1. 查看磁盘I/O
iostat -xz 1# 2. 查看I/O等待
vmstat 1# 3. 查找高IO进程
iotop

九、故障排查工具箱

9.1 必备工具列表

工具用途
strace跟踪系统调用
ltrace跟踪库调用
lsof列出打开文件
tcpdump网络抓包
sysdig系统监控和排错
bpftrace高级性能分析

9.2 诊断脚本示例

#!/bin/bash
# 快速系统诊断脚本echo "===== System Overview ====="
uptime
echo -e "\n===== Disk Usage ====="
df -h
echo -e "\n===== Memory Usage ====="
free -h
echo -e "\n===== Top Processes ====="
ps aux --sort=-%cpu | head -10
echo -e "\n===== Recent Errors ====="
journalctl -xe -n 20 --no-pager

总结 🎯

通过本文的系统学习,我们已经构建了完整的Linux故障排查知识体系:

  1. 系统化思维:从现象到根源的推理方法 🧠
  2. 分层诊断:硬件→系统→服务的检查路径 🔍
  3. 工具链应用:各类专业诊断工具的使用 🛠️
  4. 应急方案:崩溃恢复与数据抢救技巧 🚑

排障黄金法则

  • 先备份再操作:重要数据优先保护 💾
  • 最小变动原则:一次只改一个变量 🔧
  • 日志为王:系统日志是最佳线索 📜

记住:优秀的运维工程师都是经验丰富的侦探! 现在就去实践这些排查技巧吧!🐧✨


PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解析:从12306看混合云架构下的高并发系统设计

作为曾参与12306余票查询系统高并发升级的技术从业者&#xff0c;笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思&#xff0c;特此分享十年前的架构解密文献&#xff08;该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode&#xff0c;代码库详见&#xf…

华为Pura X的智控键:让折叠机体验更上一层楼的设计

还记得Mate 70系列刚出那会&#xff0c;我体验了下智控键&#xff0c;那时候就觉得这个“把快捷方式做进电源键”的交互方式非常惊艳&#xff0c;没想到在Pura X上&#xff0c;这种便捷体验感更上了一层楼。 智控键&#xff1a;折叠屏手机的天选快捷方式&#xff1f; 传统折叠…

springboot如何管理多数据源?

静态多数据源管理 配置多个数据源 :创建多个数据源的配置类,通常使用 @ConfigurationProperties 注解来绑定配置文件中的数据源属性,并通过 @Bean 注解定义多个 DataSource Bean 。例如: 配置类: @Configuration public class DataSourceConfig {@Bean(name = "prima…

谷歌终止新冠疫情时期结构化数据支持:SEO影响与应对策略

2025年4月&#xff0c;谷歌悄然宣布将于7月31日起停止支持新冠疫情时期的“特殊公告”&#xff08;SpecialAnnouncement&#xff09;结构化数据。这一举措标志着谷歌正式结束一项在疫情期间推出的实验性功能&#xff0c;对依赖该结构化数据的网站管理员和SEO从业者来说&#xf…

常见游戏引擎介绍与对比

Unreal Engine (UE4/UE5) 主语言&#xff1a;C Unreal Engine 主要使用 C 作为开发语言。C 提供了高性能的底层控制&#xff0c;适用于需要精细调优的 AAA 级游戏。C 在 Unreal 中用于开发核心游戏逻辑、物理引擎等性能要求较高的部分。 脚本语言&#xff1a;蓝图&#xff08;B…

【C++】继承----下篇

文章目录 前言一、实现一个不能继承的类二、友元与继承三、继承与静态成员四、多继承以及菱形继承问题1.继承模型&#xff1a;2.菱形继承的问题3.虚拟继承解决数据冗余和二义性的原理4.虚拟继承的原理 五、继承的总结和反思1.继承和组合 总结 前言 各位好呀!今天呢我们接着讲继…

洛谷 B3647:【模板】Floyd 算法

【题目来源】 https://www.luogu.com.cn/problem/B3647 【题目描述】 给出一张由 n 个点 m 条边组成的无向图。 求出所有点对 (i,j) 之间的最短路径。 【输入格式】 第一行为两个整数 n&#xff0c;m&#xff0c;分别代表点的个数和边的条数。 接下来 m 行&#xff0c;每行三…

netlist

在电子设计自动化&#xff08;EDA&#xff09;中&#xff0c;网表&#xff08;Netlist&#xff09; 是描述电路设计连接关系的核心数据结构&#xff0c;本质上是电路元件&#xff08;如逻辑门、晶体管、模块&#xff09;及其互连关系的 文本化或结构化表示。它是从抽象设计&…

Cadence学习笔记之---原理图设计基本操作

目录 01 | 引 言 02 | 环境描述 03 | 原理图工具介绍 04 | 原理图设计基本操作 05 | 生成页间引用 06 | 元件自动编号 07 | 结 尾 01 | 引 言 书接上回&#xff0c;在前文中讲述了怎样制作常用的库元件&#xff0c;如电阻、二极管&#xff0c;IC器件&#xff0c;以及怎…

【华为HCIP | 华为数通工程师】821—多选解析—第十七页

多选835、IS-IS协议所使用的NSAP地址主要由哪几个部分构成? A、AREA ID B、SEL C、DSCp D、SYSTEM ID 解析:NSAP地址:网络服务访问点(Network Service Access Point)是 OSI 协议中用于定位资源的地址。NSAP 的地址结构如图所示,它由 IDP(Initial Domain …

Linux系统中命令设定临时IP

1.查看ip ---ifconfig 进入指定的网络接口 ifconfig ens160 建立服务器临时IP ifconfig ens160 ip地址 network 系统进行重启后&#xff0c;临时IP将会消失 ip address add ip地址 dev 服务器 ---添加临时ip ip address delete ip地址 dev 服务器 ---删除临时ip 设置ip&a…

深度学习之卷积神经网络入门

一、引言 在深度学习蓬勃发展的今天&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;凭借其在图像识别、计算机视觉等领域的卓越表现&#xff0c;成为了人工智能领域的核心技术之一。从手写数字识别到复杂的医学影像分析&a…

使用RabbitMQ实现判题功能

这次主要选用RabbitMQ消息队列来对判题服务和题目服务解耦&#xff0c;题目服务只需要向消息队列发送消息&#xff0c;判题服务从消息队列中取信息去执行判题&#xff0c;然后异步更新数据库即可。 五一宝宝请快点跑~~~~~ 先回顾一下RabbitMQ &#xff08;1&#xff09;引入依…

HTML5后台管理界面开发

HTML5后台管理界面开发 随着互联网技术的快速发展&#xff0c;后台管理系统在各个业务领域中扮演着越来越重要的角色。它不仅帮助企业管理数据、用户和业务流程&#xff0c;也为决策提供了依据。本文将介绍如何使用HTML5开发一个简单的后台管理界面&#xff0c;并结合代码示例…

Oracle 11g RAC手动打补丁详细步骤

备份&#xff1a; 节点1&#xff1a; root用户备份GI_home tar cvf Ghome_backup.tar /oracle/grid/crsoracle用户备份ORACLE_HOME tar cvf ohome_backup.tar $ORACLE_HOME节点2&#xff1a; root用户备份GI_home tar cvf Ghome_backup.tar /oracle/grid/crsoracle用户备份…

xfce桌面汉化设置

文章目录 汉化配置小结 汉化配置 检查当前语言环境&#xff0c;执行指令locale&#xff0c;如果输出的 LANG、LC_ALL 等未包含 zh_CN.UTF-8&#xff0c;需要设置中文环境。 安装中文语言包 sudo apt update sudo apt install language-pack-zh-hans language-pack-zh-hant设置…

如何在IDEA中高效使用Test注解进行单元测试?

在软件开发过程中&#xff0c;单元测试是保证代码质量的重要手段之一。而IntelliJ IDEA作为一款强大的Java开发工具&#xff0c;提供了丰富的功能来支持JUnit测试&#xff0c;尤其是通过Test注解可以快速编写和运行单元测试。那么&#xff0c;如何在IDEA中高效使用Test注解进行…

Linux 路由

Linux路由表 一&#xff1a;查看路由二&#xff1a;添加路由三&#xff1a;删除路由四&#xff1a;路由测试五&#xff1a;路由选择机制1.路由表2.路由匹配机制3.策略路由 示例1.多网卡分流2.VPN分流3.双默认路由负载均衡 一&#xff1a;查看路由 # 查看 main 表 ip route sho…

x-cmd install | brows - 终端里的 GitHub Releases 浏览器,告别繁琐下载!

目录 核心功能与优势安装适用场景 还在为寻找 GitHub 项目的特定 Release 版本而苦恼吗&#xff1f;还在网页上翻来覆去地查找下载链接吗&#xff1f;现在&#xff0c;有了 brows&#xff0c;一切都将变得简单高效&#xff01; brows 是一款专为终端设计的 GitHub Releases 浏览…

Vue多地址代理端口调用

第一种方法 config.ts文件 配置多条代理服务端口 如下所示:proxy: {/app: {// 其他的端口target: http://125.124.5.117:12877/,changeOrigin: true}/api: {//默认的端口// http://192.168.31.53:5173/target: http://192.168.31.199:18777/,changeOrigin: true,rewrite: pat…