面試官提問(wèn):Linux 系統(tǒng)故障時(shí),你會(huì)用哪些工具排查?
引言
正如標(biāo)題所言:如果面試官問(wèn)你,如果在 Linux 中系統(tǒng)出現(xiàn)了問(wèn)題,你會(huì)使用哪些工具排查呢?
那就把下面的三分之一記住就足夠了,如果面試官不服氣,那就把下面所有的都給他說(shuō)一遍,讓他啞口無(wú)言。
開(kāi)始
簡(jiǎn)介
性能分析
? top: 實(shí)時(shí)顯示系統(tǒng)的 CPU、內(nèi)存使用情況,以及各個(gè)進(jìn)程的資源消耗。
? htop: top 命令的增強(qiáng)版,界面更友好,支持鼠標(biāo)操作,可以更加方便地查看和管理進(jìn)程。
? mpstat: 顯示各個(gè) CPU 核心的使用情況,分析多核系統(tǒng)中的 CPU 負(fù)載。
? sar: 系統(tǒng)活動(dòng)報(bào)告工具,可以監(jiān)控 CPU、內(nèi)存、I/O 等系統(tǒng)資源的使用情況。它可以在長(zhǎng)時(shí)間內(nèi)進(jìn)行系統(tǒng)性能的數(shù)據(jù)采集。
? vmstat: 查看 CPU、內(nèi)存、交換分區(qū)的性能,能夠檢測(cè) CPU 的等待時(shí)間和系統(tǒng)瓶頸。
內(nèi)存性能分析
? free: 顯示系統(tǒng)當(dāng)前的內(nèi)存和交換分區(qū)使用情況。
? vmstat: 顯示內(nèi)存、進(jìn)程、I/O 系統(tǒng)的性能狀態(tài)。可以幫助分析內(nèi)存的使用情況。
? smem: 詳細(xì)列出每個(gè)進(jìn)程的內(nèi)存消耗情況。
? top / htop: 可以查看每個(gè)進(jìn)程的內(nèi)存使用情況。
? slabtop: 顯示內(nèi)核 slab 緩存的使用情況,有助于了解內(nèi)存中緩存數(shù)據(jù)塊的分布。
磁盤性能分析
? iostat: 顯示磁盤 I/O 的性能統(tǒng)計(jì)信息,尤其是在分析磁盤讀寫性能時(shí)非常有用。
? iotop: 類似于 top,但專注于磁盤 I/O,能夠按進(jìn)程顯示實(shí)時(shí) I/O 活動(dòng)。
? df: 顯示文件系統(tǒng)的磁盤使用情況。
? du: 顯示文件或目錄的磁盤空間使用情況。
? lsblk: 列出所有存儲(chǔ)設(shè)備和分區(qū)信息。
? blktrace: 對(duì)塊設(shè)備進(jìn)行詳細(xì)的 I/O 跟蹤分析。
網(wǎng)絡(luò)性能分析
? ifconfig / ip: 顯示和配置網(wǎng)絡(luò)接口的信息。
? netstat: 查看網(wǎng)絡(luò)連接、路由表、接口狀態(tài)、協(xié)議統(tǒng)計(jì)等。
? ss: 替代 netstat 的工具,功能更強(qiáng)大,速度更快,分析網(wǎng)絡(luò)連接和套接字。
? iftop: 實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)帶寬使用情況,顯示每個(gè)網(wǎng)絡(luò)連接的實(shí)時(shí)流量。
? nload: 實(shí)時(shí)查看網(wǎng)絡(luò)流量的工具,能夠顯示出入口和出口的帶寬使用情況。
? ping: 測(cè)試與遠(yuǎn)程主機(jī)的網(wǎng)絡(luò)連通性,測(cè)量網(wǎng)絡(luò)延遲。
? traceroute: 查看數(shù)據(jù)包從本地主機(jī)到目標(biāo)主機(jī)經(jīng)過(guò)的路由信息。
? tcpdump: 強(qiáng)大的網(wǎng)絡(luò)抓包工具,能夠捕獲和分析網(wǎng)絡(luò)數(shù)據(jù)包。
? nmap: 網(wǎng)絡(luò)掃描工具,檢查開(kāi)放端口、主機(jī)發(fā)現(xiàn)和網(wǎng)絡(luò)服務(wù)。
進(jìn)程管理
? ps: 列出當(dāng)前正在運(yùn)行的進(jìn)程。
? top / htop: 查看實(shí)時(shí)進(jìn)程資源消耗情況。
? pstree: 以樹(shù)形結(jié)構(gòu)展示進(jìn)程關(guān)系。
? kill: 終止特定的進(jìn)程。
? strace: 跟蹤系統(tǒng)調(diào)用和信號(hào),分析進(jìn)程執(zhí)行的系統(tǒng)調(diào)用,非常適合調(diào)試和跟蹤進(jìn)程的運(yùn)行狀態(tài)。
綜合性能分析
? dstat: 結(jié)合 vmstat、iostat、netstat 等工具的功能,實(shí)時(shí)顯示 CPU、內(nèi)存、磁盤 I/O、網(wǎng)絡(luò)等資源的使用情況。
? perf: 內(nèi)核提供的強(qiáng)大性能分析工具,支持采樣、跟蹤和性能分析,適合開(kāi)發(fā)人員和高級(jí)用戶進(jìn)行深入的性能調(diào)優(yōu)。
? sar: 系統(tǒng)監(jiān)控和報(bào)告工具,可以詳細(xì)記錄 CPU、內(nèi)存、網(wǎng)絡(luò)、I/O 等各方面的性能。
? sysstat: 包含 iostat、mpstat、sar 等多種工具的綜合工具包。
? glances: 類似于 htop 和 dstat 的結(jié)合,實(shí)時(shí)監(jiān)控 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、進(jìn)程等多項(xiàng)系統(tǒng)性能指標(biāo)。
最佳實(shí)踐
一、性能分析
1. top
? 用途: 實(shí)時(shí)監(jiān)控 CPU、內(nèi)存及進(jìn)程資源消耗。
? 快捷鍵:
a:按 CPU 使用率排序。
b:按內(nèi)存使用率排序。
c :退出。
? 示例:
top -c # 顯示完整進(jìn)程命令行2. htop (需安裝)
? 用途: 增強(qiáng)版 top,支持鼠標(biāo)操作、多核負(fù)載可視化。
? 安裝:
sudo apt install htop # Debian/Ubuntu? 示例:
htop # 查看線程級(jí) CPU 使用3. mpstat (需安裝 sysstat )
? 用途: 監(jiān)控多核 CPU 各核心利用率。
? 示例:
mpstat -P ALL 1 # 每秒刷新所有核心狀態(tài)4. perf
? 用途: 深入分析 CPU 性能事件(如函數(shù)熱點(diǎn)、緩存命中率)。
? 示例:
perf top # 實(shí)時(shí)查看 CPU 熱點(diǎn)
perf record -g # 生成火焰圖數(shù)據(jù)5. sar(需安裝 sysstat)
? 用途: 長(zhǎng)期記錄 CPU 使用率、上下文切換等。
? 示例:
sar -u 1 5 # 查看過(guò)去 5 秒 CPU 使用率二、內(nèi)存性能分析
1. free
? 用途: 快速查看內(nèi)存和 Swap 使用量。
? 示例:
free -h # 以 GB/MB 顯示2. vmstat
? 用途: 綜合監(jiān)控內(nèi)存、Swap、進(jìn)程隊(duì)列和 I/O。
? 示例:
vmstat 1 # 每秒刷新一次3. smem(需安裝)
? 用途: 按進(jìn)程統(tǒng)計(jì)實(shí)際物理內(nèi)存占用(USS/PSS/RSS)。
? 安裝:
sudo apt install smem # Debian/Ubuntu? 示例:
smem -u # 按用戶統(tǒng)計(jì)內(nèi)存4. slabtop
? 用途: 分析內(nèi)核 Slab 緩存(內(nèi)核對(duì)象占用內(nèi)存)。
? 示例:
slabtop -s c # 按緩存大小排序三、磁盤性能分析
1. iostat(需安裝 sysstat)
? 用途: 監(jiān)控磁盤吞吐量、延遲和利用率。
? 示例:
iostat -xz 1 # 查看詳細(xì) I/O 統(tǒng)計(jì)2. iotop(需安裝)
? 用途: 按進(jìn)程實(shí)時(shí)顯示磁盤 I/O 活動(dòng)。
? 安裝:
sudo apt install iotop # Debian/Ubuntu? 示例:
iotop -o # 僅顯示活躍 I/O 進(jìn)程3. blktrace(需安裝)
? 用途: 深度跟蹤塊設(shè)備 I/O 請(qǐng)求(調(diào)試磁盤性能瓶頸)。
? 示例:
blktrace -d /dev/sda -o trace # 跟蹤 sda 設(shè)備四、網(wǎng)絡(luò)性能分析
1. iftop(需安裝)
? 用途: 實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)連接帶寬。
? 示例:
sudo iftop -i eth0 # 指定網(wǎng)卡監(jiān)控2. nethogs(需安裝)
? 用途: 按進(jìn)程統(tǒng)計(jì)網(wǎng)絡(luò)流量。
? 示例:
nethogs eth0 # 查看指定網(wǎng)卡流量3. ss
? 用途: 替代 netstat,快速查看連接和端口狀態(tài)。
? 示例:
ss -tunlp # 顯示所有 TCP/UDP 連接及進(jìn)程4. tcpdump
? 用途: 抓包分析網(wǎng)絡(luò)流量(需 root 權(quán)限)。
? 示例:
tcpdump -i eth0 port 80 # 抓取 HTTP 流量五、進(jìn)程級(jí)分析
1. pidstat(需安裝 sysstat )
? 用途: 監(jiān)控進(jìn)程的 CPU、內(nèi)存、I/O。
? 示例:
pidstat -d -p 1234 1 # 監(jiān)控 PID 1234 的磁盤 I/O2. strace
? 用途: 跟蹤進(jìn)程的系統(tǒng)調(diào)用和信號(hào)。
? 示例:
strace -p 1234 -T # 跟蹤 PID 1234 的調(diào)用耗時(shí)六、綜合工具與場(chǎng)景指南
1. 一站式監(jiān)控工具
? glances(需安裝)
glances # 實(shí)時(shí)監(jiān)控 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)? dstat(需安裝)
dstat -c -m -d -n # 綜合顯示 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)2. 高頻場(chǎng)景速查
? 系統(tǒng)卡頓:
top → vmstat 1 → iostat 1 → pidstat 1 # 逐層定位瓶頸? 網(wǎng)絡(luò)延遲:
ping 8.8.8.8 → traceroute google.com → tcpdump -i eth0 # 逐步排查? 進(jìn)程異常:
strace -p <PID> → perf record -g -p <PID> # 分析系統(tǒng)調(diào)用和 CPU 熱點(diǎn)3. 實(shí)用組合命令
? 查找 CPU/內(nèi)存占用 Top 進(jìn)程:
ps aux --sort=-%cpu | head -10 # Top 10 CPU 進(jìn)程
ps aux --sort=-%mem | head -10 # Top 10 內(nèi)存進(jìn)程? 持續(xù)監(jiān)控磁盤空間:
watch -n 1 'df -h' # 每秒刷新磁盤使用七、使用場(chǎng)景總結(jié)
? 系統(tǒng)變慢: 先用 top 或 htop 查看整體負(fù)載,再用 vmstat/iostat 定位 CPU、磁盤或內(nèi)存瓶頸。
? 網(wǎng)絡(luò)延遲: iftop 或 nethogs 查看流量,tcpdump 抓包分析。
? 進(jìn)程卡死: strace 跟蹤系統(tǒng)調(diào)用,perf 分析 CPU 熱點(diǎn)。
實(shí)際案例解說(shuō)
這邊選擇幾個(gè)有代表性的把參數(shù)詳細(xì)聊聊。

vmstat 命令顯示了 系統(tǒng)資源的實(shí)時(shí)狀態(tài),幫助你監(jiān)控 CPU、內(nèi)存、IO、進(jìn)程等資源的使用情況。
(進(jìn)程相關(guān))
? r: 運(yùn)行隊(duì)列中等待 CPU 的進(jìn)程數(shù)。如果這個(gè)數(shù)值大于 CPU 核心數(shù)量,說(shuō)明系統(tǒng) CPU 資源不足。
? b: 不可中斷睡眠的進(jìn)程數(shù)(一般是等待 I/O 的進(jìn)程)。
(內(nèi)存相關(guān))
? swpd: 使用的 swap 空間(單位:KB)。如果非 0,表示系統(tǒng)已經(jīng)在使用 swap 分區(qū),可能會(huì)影響性能。
? free: 空閑內(nèi)存(單位:KB)。
? buff: 用于緩沖區(qū)的內(nèi)存(單位:KB),用于存儲(chǔ)文件系統(tǒng)的元數(shù)據(jù)。
? cache: 用于緩存的內(nèi)存(單位:KB),加速數(shù)據(jù)讀取。如果緩存命中率高,會(huì)減少 I/O 壓力。
(交換分區(qū)相關(guān))
? si(swap in): 從 swap 分區(qū)交換到內(nèi)存的大?。▎挝唬篕B/秒)。
? so(swap out): 從內(nèi)存交換到 swap 分區(qū)的大?。▎挝唬篕B/秒)。
? 如果 si 和 so 值較大,說(shuō)明系統(tǒng)內(nèi)存不足,需要頻繁使用 swap,這會(huì)降低性能。
(相關(guān))
? bi(block in): 從塊設(shè)備(如磁盤)讀取的數(shù)據(jù)量(單位:塊/秒)。
? bo(block out): 寫入塊設(shè)備(如磁盤)的數(shù)據(jù)量(單位:塊/秒)。
? 這兩個(gè)值高時(shí),說(shuō)明磁盤 I/O 活動(dòng)頻繁,可能會(huì)成為系統(tǒng)瓶頸。
(系統(tǒng)相關(guān))
? in: 每秒中斷次數(shù),包括硬件和系統(tǒng)時(shí)鐘中斷。
? cs(context switches): 每秒上下文切換次數(shù)。上下文切換多說(shuō)明進(jìn)程頻繁切換,可能影響性能。
(相關(guān))
? us(user time): CPU 花費(fèi)在用戶進(jìn)程上的時(shí)間百分比。用戶進(jìn)程是指非內(nèi)核的應(yīng)用程序。
? sy(system time): CPU 花費(fèi)在系統(tǒng)內(nèi)核進(jìn)程上的時(shí)間百分比。
? id(idle time): CPU 的空閑時(shí)間百分比。如果值很高,說(shuō)明 CPU 比較空閑。
? wa(wait time): CPU 等待 I/O 的時(shí)間百分比。如果值高,說(shuō)明 I/O 成為系統(tǒng)瓶頸。
? st(steal time): 虛擬機(jī)中,CPU 被其他虛擬機(jī)占用的時(shí)間百分比。如果值高,說(shuō)明虛擬化資源不足。
如何分析圖中的數(shù)據(jù):
? r 為 0: 沒(méi)有等待 CPU 的進(jìn)程,CPU 資源充足。
? id 高達(dá) 98-97%: CPU 基本處于空閑狀態(tài),系統(tǒng)負(fù)載很低。
? wa 為 0%: 沒(méi)有 CPU 等待 I/O,I/O 性能正常。
? si 和 so 為 0: 系統(tǒng)沒(méi)有使用 swap,內(nèi)存充足。
? bi 和 bo 較低: 磁盤 I/O 壓力不大。
總結(jié):
從截圖來(lái)看,系統(tǒng)整體運(yùn)行狀態(tài)非常良好:
? CPU 基本處于空閑狀態(tài)(id 很高)。
? 沒(méi)有使用 swap(swpd、si、so 都是 0)。
? 沒(méi)有等待 CPU 或 I/O 的進(jìn)程(r、b 和 wa 都接近 0)。
這表明當(dāng)前系統(tǒng)負(fù)載很低,沒(méi)有出現(xiàn)任何性能瓶頸。
圖片
你的截圖顯示了 iostat -d 3 命令的輸出,它展示了 磁盤設(shè)備的性能數(shù)據(jù)。
iostat -d 3 輸出字段解釋
1. Device:
? 顯示監(jiān)控的磁盤設(shè)備名稱(如 vda 和 vdb)。
? 這些是塊設(shè)備,如虛擬機(jī)中的磁盤、物理磁盤或分區(qū)。
2. tps(Transactions per Second):
? 每秒對(duì)該設(shè)備發(fā)起的 I/O 請(qǐng)求數(shù)(讀或?qū)懀?/p>
? 這個(gè)值越高,說(shuō)明設(shè)備的 I/O 活動(dòng)越頻繁。
3. kB_read/s:
? 每秒從設(shè)備讀取的 數(shù)據(jù)量(單位:KB)。
? 如果這個(gè)值持續(xù)較高,說(shuō)明系統(tǒng)在頻繁讀取數(shù)據(jù)。
4. kB_wrtn/s:
? 每秒寫入設(shè)備的 數(shù)據(jù)量(單位:KB)。
? 如果寫入數(shù)據(jù)量較高,說(shuō)明系統(tǒng)在頻繁寫數(shù)據(jù)到磁盤。
5. kB_dscd/s(discarded data per second):
? 每秒丟棄的數(shù)據(jù)量(單位:KB)。通常用于監(jiān)控 SSD 設(shè)備的 TRIM 操作。
? 在你的輸出中,該值為 0,說(shuō)明當(dāng)前沒(méi)有丟棄操作。
6. kB_read:
? 從啟動(dòng)以來(lái)總共讀取的數(shù)據(jù)量(單位:KB)。
7. kB_wrtn:
? 從啟動(dòng)以來(lái)總共寫入的數(shù)據(jù)量(單位:KB)。
8. kB_dscd:
? 從啟動(dòng)以來(lái)總共丟棄的數(shù)據(jù)量(單位:KB)。在你截圖中為 0。
分析你的輸出
? vda 設(shè)備:
? tps:3.74,每秒有 3.74 個(gè) I/O 操作。
? 讀取速率:每秒讀取 0.52 KB。
? 寫入速率:每秒寫入 65.88 KB。
? 說(shuō)明:vda 設(shè)備的寫入操作較為頻繁,性能上主要是寫密集型。
? vdb 設(shè)備:
? tps:0.10,每秒只有 0.10 個(gè) I/O 操作。
? 讀取和寫入速率:讀取和寫入數(shù)據(jù)量都很?。s 0.52 KB 和 2.10 KB/s)。
? 說(shuō)明:vdb 設(shè)備 I/O 活動(dòng)較少,讀寫需求不高。
如何解讀這些數(shù)據(jù)
1. I/O 活動(dòng):
? vda 設(shè)備 I/O 活動(dòng)相對(duì)較高,且主要以寫操作為主(每秒寫入 65.88 KB)。
? vdb 活動(dòng)非常少,基本沒(méi)有大量的讀寫需求。
2. 性能分析:
? 如果寫入操作頻繁且 I/O 性能出現(xiàn)瓶頸(如 tps 和 kB_wrtn/s 高得離譜),可能需要檢查設(shè)備是否需要優(yōu)化或擴(kuò)展。
? 如果讀取較慢,可能需要檢查是否有必要優(yōu)化緩存。
總結(jié)
? vda 設(shè)備 主要是寫操作頻繁,需要密切監(jiān)控寫入性能。
? vdb 設(shè)備 活動(dòng)很少,沒(méi)有明顯的性能壓力。
你可以繼續(xù)使用 iostat 命令來(lái)實(shí)時(shí)監(jiān)控設(shè)備的 I/O 性能,并觀察這些值是否在高峰期發(fā)生顯著變化。如有必要,也可以結(jié)合 iotop 或 dstat 等工具進(jìn)行進(jìn)一步分析。
圖片
該命令顯示 每個(gè) CPU 核心 的詳細(xì)使用情況,并每 3 秒更新一次。
字段解釋:
1. CPU:
? 顯示是哪一個(gè) CPU 核心。
? all 表示所有 CPU 核心的平均值。
? 接下來(lái)的每一行代表一個(gè)具體的 CPU 核心(例如 0 到 7 代表系統(tǒng)中的 8 個(gè)核心)。
2. %usr(User Time):
? 用戶進(jìn)程消耗的 CPU 百分比(不包括內(nèi)核進(jìn)程)。
? 這個(gè)值較高時(shí),說(shuō)明系統(tǒng)在運(yùn)行大量的用戶級(jí)應(yīng)用程序。
3. %nice(Nice Time):
? 被調(diào)整優(yōu)先級(jí)(nice 級(jí)別)的進(jìn)程消耗的 CPU 百分比。
? 如果有低優(yōu)先級(jí)任務(wù)占用大量 CPU 時(shí)間,這個(gè)值會(huì)增加。
4. %sys(System Time):
? 內(nèi)核進(jìn)程消耗的 CPU 百分比。
? 如果這個(gè)值較高,說(shuō)明內(nèi)核級(jí)的任務(wù)或 I/O 操作占用了大量 CPU 時(shí)間。
5. %iowait(I/O Wait):
? CPU 等待 I/O 操作完成的時(shí)間百分比。
? 如果這個(gè)值較高,說(shuō)明 CPU 大量時(shí)間被耗費(fèi)在等待磁盤或網(wǎng)絡(luò) I/O 上。
6. %irq(Interrupt Requests):
? CPU 處理硬件中斷(IRQ)請(qǐng)求的時(shí)間百分比。
? 高值表明系統(tǒng)中有頻繁的硬件中斷(如網(wǎng)絡(luò)或磁盤活動(dòng))。
7. %soft(Soft IRQs):
? 軟中斷占用的 CPU 時(shí)間百分比。
? 軟中斷多與網(wǎng)絡(luò)或驅(qū)動(dòng)程序相關(guān)。
8. %steal(Steal Time):
? 在虛擬化環(huán)境中,CPU 被其他虛擬機(jī)占用的時(shí)間百分比。
? 如果值較高,說(shuō)明虛擬機(jī)沒(méi)有獲得足夠的 CPU 資源。
9. %guest(Guest Time):
? CPU 用于運(yùn)行虛擬機(jī)內(nèi)進(jìn)程的時(shí)間百分比。
10. %gnice(Guest Nice Time):
? 虛擬機(jī)中被調(diào)整了優(yōu)先級(jí)的進(jìn)程消耗的時(shí)間。
11. %idle(Idle Time):
? CPU 空閑的時(shí)間百分比。
? 如果該值高,說(shuō)明系統(tǒng)比較空閑;如果低,說(shuō)明 CPU 資源繁忙。
分析你的輸出:
1. 所有 CPU 核心的平均情況(all 行):
? %usr: 2.59%——用戶進(jìn)程占用少量 CPU 時(shí)間。
? %sys: 2.30%——內(nèi)核進(jìn)程也占用了一些時(shí)間。
? %iowait: 0.17%——CPU 花在等待 I/O 的時(shí)間很少。
? %idle: 94.95%——整體來(lái)看,CPU 大部分時(shí)間處于空閑狀態(tài)。
2. 各個(gè) CPU 核心的情況:
? CPU 6: %usr 為 7.33%,CPU 活動(dòng)稍高。
? 其余核心: 大部分核心的 %idle 在 90% 以上,表明它們大部分時(shí)間處于空閑狀態(tài)。
結(jié)論:
? 系統(tǒng)整體負(fù)載較低,因?yàn)樗?CPU 的空閑時(shí)間 %idle 都很高(94% 以上)。
? CPU 6 相較于其他核心稍微活躍,但沒(méi)有出現(xiàn)過(guò)高的負(fù)載,說(shuō)明系統(tǒng)沒(méi)有性能瓶頸。
? I/O 等待時(shí)間 %iowait 很低(0.17%),說(shuō)明磁盤和網(wǎng)絡(luò) I/O 不存在明顯的瓶頸。
你當(dāng)前的系統(tǒng)狀態(tài)非常良好,CPU 負(fù)載輕,I/O 等待時(shí)間短,無(wú)需額外優(yōu)化。如果某個(gè) CPU 核心的負(fù)載過(guò)高或 %iowait 增加,可能需要進(jìn)一步分析具體的進(jìn)程或任務(wù)。






























