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.pswp.cn/bicheng/78335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78335.shtml
英文地址,請注明出處:http://en.pswp.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…