Linux系統調優和問題定位需要掌握一系列強大的工具,涵蓋系統監控、性能分析、故障排查等多個方面。以下是一些核心工具和它們的典型應用場景,分類整理如下:
一、系統資源監控(實時概覽)
-
top
/htop
- 功能: 實時動態查看系統整體性能指標(CPU、內存、Swap、負載)和進程資源占用(CPU%、MEM%、狀態、命令)。
- 用途: 快速識別資源消耗大戶(CPU、內存)、僵尸進程、系統負載情況。
htop
是top
的增強版,支持顏色、鼠標操作、樹狀視圖、更友好的界面。 - 常用命令:
top
(進入后按P
按CPU排序,M
按內存排序,1
顯示所有CPU核心)htop
-
vmstat
- 功能: 報告虛擬內存統計信息、進程、塊IO、中斷、CPU活動。
- 用途: 快速查看系統整體瓶頸方向(CPU等待io
wa
值高表示IO瓶頸,r
隊列長表示CPU飽和,si/so
高表示內存不足觸發Swap交換)。 - 常用命令:
vmstat 1
(每秒刷新一次)
-
dstat
- 功能: 全能系統資源統計工具,整合了
vmstat
,iostat
,ifstat
,netstat
等工具的功能,支持彩色輸出、CSV導出。 - 用途: 同時監控CPU、磁盤、網絡、內存、中斷、上下文切換等,一目了然發現關聯性(如網絡流量激增時磁盤IO是否也高)。
- 常用命令:
dstat -cdngym --top-cpu --top-mem
- 功能: 全能系統資源統計工具,整合了
二、CPU 性能分析
-
mpstat
- 功能: 報告每個CPU或所有CPU的平均使用情況,包括用戶態、內核態、空閑、IO等待、軟硬中斷、虛擬化占用等。
- 用途: 查看CPU使用是否均衡,是否存在單個核心過載,分析CPU時間消耗在用戶態還是內核態。
- 常用命令:
mpstat -P ALL 1
-
pidstat
- 功能: 監控進程/線程的CPU、內存、IO等使用情況。
- 用途: 細粒度定位具體哪個進程/線程消耗CPU高。
- 常用命令:
pidstat -u 1
(查看所有進程CPU使用)pidstat -t -p <PID> 1
(查看特定進程的所有線程CPU使用)
-
perf
- 功能: Linux內核提供的強大性能分析工具(性能計數器)。
- 用途:
perf top
:實時顯示消耗CPU最多的函數/指令(類似top
,但深入到函數級)。perf record
/perf report
:錄制性能事件(如CPU周期、緩存命中/失效、分支預測失誤),生成報告進行離線分析。perf stat
:運行一個命令并統計其性能計數器(指令數、周期數、緩存引用/失效等)。
- 用途: 深入分析CPU熱點(哪些函數最耗時)、緩存效率、分支預測問題,定位代碼級性能瓶頸。
-
uptime
- 功能: 顯示系統運行時間、當前登錄用戶數和系統平均負載。
- 用途: 快速了解系統負載趨勢(1分鐘、5分鐘、15分鐘平均值)。負載高于CPU核心數通常表示存在排隊。
三、內存 性能分析
-
free
- 功能: 顯示系統總體內存和Swap使用情況(總量、已用、空閑、緩沖、緩存)。
- 用途: 快速了解物理內存和Swap空間的使用壓力。關鍵看
available
列(可用內存,包含可回收的緩存/緩沖)。 - 常用命令:
free -h
(以人類可讀格式顯示)
-
vmstat
(見上文)- 用途: 關注
si
(每秒從Swap讀入內存)、so
(每秒從內存寫入Swap)。si/so
持續大于0是內存不足的強烈信號。
- 用途: 關注
-
pidstat
(見上文)- 用途:
pidstat -r 1
查看進程的內存使用(常駐集RSS、虛擬內存VSZ、缺頁異常)。
- 用途:
-
pmap
- 功能: 報告指定進程的詳細內存映射情況。
- 用途: 分析進程內存具體用在哪些庫、堆、棧上,查找內存泄漏嫌疑區域。
- 常用命令:
pmap -x <PID>
-
slabtop
- 功能: 實時顯示內核
slab
緩存(內核對象緩存)的使用情況。 - 用途: 診斷內核級內存消耗或泄漏。
- 功能: 實時顯示內核
四、磁盤 I/O 性能分析
-
iostat
- 功能: 監控系統所有磁盤設備的IO統計信息(TPS、讀寫速度、讀寫延遲、隊列長度、設備利用率%util)。
- 用途: 識別磁盤瓶頸(高%util、長await/wait表示設備飽和或慢)、對比不同磁盤性能。
- 常用命令:
iostat -dx 1
(查看設備詳細統計,每秒刷新)
-
iotop
- 功能: 類似
top
,但實時顯示按磁盤IO排序的進程/線程。 - 用途: 快速定位哪個進程在進行大量磁盤讀寫。
- 常用命令:
iotop
- 功能: 類似
-
pidstat
(見上文)- 用途:
pidstat -d 1
查看進程的磁盤讀寫統計(kB_rd/s, kB_wr/s)。
- 用途:
-
lsof
- 功能: 列出被進程打開的文件。
- 用途: 結合
iostat/iotop
定位到具體進程后,查看該進程正在讀寫哪些文件。 - 常用命令:
lsof -p <PID>
-
blktrace
/blkparse
/btt
- 功能: 強大的塊設備層IO跟蹤分析工具套件。
- 用途: 深入分析IO請求在塊設備層(從文件系統下發到設備驅動完成)的生命周期和延遲分布,定位IO棧中的具體瓶頸點。學習曲線較陡。
五、網絡 性能分析
-
netstat
/ss
- 功能: 顯示網絡連接、路由表、接口統計、偽裝連接、組播成員等信息。
ss
(socket statistics
) 是netstat
的現代替代品,通常更快更高效。 - 用途: 查看連接狀態(如大量
TIME_WAIT
、CLOSE_WAIT
)、監聽端口、網絡接口流量統計、路由信息。 - 常用命令:
ss -tunap
(查看所有TCP/UDP連接及對應進程)netstat -s
/ss -s
(查看網絡棧統計匯總)netstat -i
/ip -s link
(查看網絡接口統計)
- 功能: 顯示網絡連接、路由表、接口統計、偽裝連接、組播成員等信息。
-
ip
- 功能: 強大的網絡接口、路由、鄰居(ARP)、隧道等配置和管理工具(替代老舊的
ifconfig
,route
,arp
)。 - 用途: 配置和查看網絡接口、路由表、ARP緩存等。
- 常用命令:
ip addr show
ip route show
ip neigh show
(ARP表)
- 功能: 強大的網絡接口、路由、鄰居(ARP)、隧道等配置和管理工具(替代老舊的
-
ethtool
- 功能: 查詢和控制網絡接口驅動參數和硬件設置。
- 用途: 查看網卡驅動信息、速度、雙工模式、統計信息(丟包、錯包)、調整Ring Buffer大小等。
- 常用命令:
ethtool <interface>
,ethtool -S <interface>
(查看詳細統計)
-
tcpdump
/wireshark
- 功能: 強大的網絡抓包和分析工具。
tcpdump
是命令行工具,wireshark
是帶圖形界面的分析器。 - 用途: 捕獲和分析網絡數據包,診斷網絡連接問題、協議問題、性能問題(重傳、亂序、窗口大小)。非常底層,需要網絡協議知識。
- 功能: 強大的網絡抓包和分析工具。
-
nload
/iftop
- 功能: 實時監控網絡接口的流量(帶寬使用)。
nload
顯示總帶寬,iftop
按連接對顯示帶寬使用排名。 - 用途: 快速查看哪個連接或主機占用了大量帶寬。
- 功能: 實時監控網絡接口的流量(帶寬使用)。
-
ping
/traceroute
/mtr
- 功能: 測試網絡連通性、路徑和延遲。
mtr
(My Traceroute
) 結合了ping
和traceroute
的功能。 - 用途: 診斷網絡可達性、路由路徑、網絡延遲和丟包發生在哪一跳。
- 功能: 測試網絡連通性、路徑和延遲。
六、系統日志分析
-
dmesg
- 功能: 查看內核環形緩沖區中的消息。
- 用途: 診斷硬件問題(驅動加載失敗、設備錯誤)、內核崩潰信息(Oops/Panic)、文件系統錯誤、內存不足事件等。系統啟動異常或硬件故障排查必看!
- 常用命令:
dmesg -T
(帶時間戳),dmesg | grep -i error
-
journalctl
(Systemd系統)