Linux TOP、HTOP深度詳解
前言
在性能測試中,top 和 htop 是非常有用的工具,可以幫助你實時監控系統資源的使用情況。這些工具可以讓你了解 CPU、內存、磁盤 I/O 和網絡 I/O 的使用情況,從而幫助你識別性能瓶頸和優化應用程序。
1. 實時監控系統資源
使用 top
啟動 top:
top
主要關注點:
CPU 使用率:觀察 %Cpu(s) 行,特別是 us(用戶空間)、sy(系統空間)和 id(空閑)。
內存使用情況:查看 KiB Mem 和 KiB Swap 行,特別是 free 和 avail Mem。
進程列表:按 P 鍵以按 CPU 使用率排序,或按 M 鍵以按內存使用率排序。
交互式命令:
h 或 ?:顯示幫助頁面。
k:殺死進程(需要輸入 PID)。
r:改變進程優先級(需要輸入 PID 和新的 nice 值)。
q:退出 top。
1:顯示每個 CPU 核心的使用情況。
f:進入字段管理器,可以選擇要顯示的列。
o:進入排序選項管理器。
W:將當前設置寫入配置文件。
使用 htop
啟動 htop:
htop
主要關注點:
CPU 使用率:頂部欄顯示了每個 CPU 核心的使用情況。
內存使用情況:頂部欄還顯示了內存和交換分區的使用情況。
進程列表:可以通過 F6 鍵選擇不同的排序方式,如按 CPU 使用率、內存使用率等。
交互式命令:
F1:顯示幫助頁面。
F2:進入設置菜單。
F3:搜索進程。
F4:過濾進程。
F5:樹狀視圖。
F6:選擇排序方式。
F7 和 F8:增加或減少進程的 nice 值。
F9:殺死進程。
F10:退出 htop。
2. 監控特定進程
如果你知道要監控的進程 ID (PID),可以直接在 top 或 htop 中查看該進程的詳細信息。
使用 top 監控特定進程:
top -p
例如:
top -p 1234
使用 htop 監控特定進程:
htop -p
例如:
htop -p 1234
3. 記錄性能數據
在長時間運行的性能測試中,記錄性能數據是非常重要的。你可以使用 top 或 htop 的批處理模式來記錄數據。
使用 top 記錄數據:
top -b -n 1 > top_output.txt
這會生成一個單次更新的數據快照,并將其保存到 top_output.txt 文件中。如果需要連續記錄,可以結合 watch 命令:
watch -n 1 'top -b -n 1' > top_output.txt
使用 htop 記錄數據:
htop 沒有直接的批處理模式,但你可以使用腳本來實現類似的功能。例如,使用 script 命令:
script -c "htop" -t 2>&1 | tee htop_output.log
4. 分析數據
一旦你收集了足夠的數據,就可以開始分析它們。你可以使用文本編輯器或專門的工具(如 gnuplot)來繪制圖表,以便更直觀地理解性能趨勢。
5. 識別瓶頸
通過監控和記錄數據,你可以識別出系統的瓶頸所在。常見的瓶頸包括:
CPU 使用率過高:檢查哪些進程占用了大量 CPU 資源。
內存不足:檢查哪些進程消耗了大量的內存。
磁盤 I/O 高:檢查哪些進程進行了大量的磁盤讀寫操作。
網絡 I/O 高:檢查哪些進程發送或接收了大量的網絡數據。
進階
1. 詳細 CPU 使用率分析
使用 top
按 CPU 使用率排序:
top -o %CPU
查看每個 CPU 核心的使用情況:
按 1 鍵顯示每個 CPU 核心的使用情況。
檢查用戶空間和系統空間的 CPU 使用率:
在 %Cpu(s) 行中,us 表示用戶空間的 CPU 使用率,sy 表示系統空間的 CPU 使用率。如果 sy 值很高,可能表示內核或驅動程序的問題;如果 us 值很高,可能表示應用程序的計算密集型任務。
使用 htop
按 CPU 使用率排序:
按 F6 鍵,選擇 %CPU 進行排序。
查看每個 CPU 核心的使用情況:
頂部欄會顯示每個 CPU 核心的使用情況。
2. 內存使用情況分析
使用 top
按內存使用率排序:
top -o %MEM
查看內存使用情況:
在 KiB Mem 行中,free 表示空閑內存,used 表示已用內存,buff/cache 表示緩存和緩沖區使用的內存。
檢查交換分區使用情況:
在 KiB Swap 行中,used 表示已用交換空間,free 表示空閑交換空間。如果交換空間使用率高,可能表示內存不足。
使用 htop
按內存使用率排序:
按 F6 鍵,選擇 %MEM 進行排序。
查看內存使用情況:
頂部欄會顯示內存和交換分區的使用情況。
3. 磁盤 I/O 分析
使用 iostat 或 iotop
iostat 可以顯示磁盤 I/O 的統計信息。
iostat -x 1
其中 -x 顯示擴展統計信息,1 是更新間隔(秒)。
iotop 類似于 top,但專門用于顯示磁盤 I/O 的使用情況。
iotop
4. 網絡 I/O 分析
使用 iftop 或 nethogs
iftop 可以顯示網絡流量。
iftop
nethogs 可以顯示每個進程的網絡帶寬使用情況。
nethogs
5. 詳細進程分析
使用 top 和 htop
查看特定進程的詳細信息:
在 top 或 htop 中,輸入進程 ID (PID) 來查看特定進程的詳細信息。
查看進程的線程:
在 htop 中,按 F5 鍵切換到樹狀視圖,可以看到進程及其子進程的關系。
查看進程的命令行參數:
在 top 中,按 c 鍵顯示完整的命令行路徑。
在 htop 中,按 F2 進入設置菜單,選擇“Display options”,勾選“Show custom thread names”。
6. 保存和分析日志
使用 top 的批處理模式
保存 top 輸出到文件:
top -b -n 100 > top_output.txt
其中 -b 表示批處理模式,-n 100 表示記錄 100 次更新。
定期記錄 top 輸出:
使用 cron 或 watch 定期記錄 top 輸出。
watch -n 5 'top -b -n 1' > top_output.txt
使用 htop 的腳本模式
使用 script 命令記錄 htop 輸出:
script -c "htop" -t 2>&1 | tee htop_output.log
7. 結合其他工具進行分析
使用 vmstat
vmstat 可以顯示虛擬內存統計信息。
vmstat 1
其中 1 是更新間隔(秒)。
使用 mpstat
mpstat 可以顯示每個 CPU 核心的統計信息。
mpstat -P ALL 1
其中 -P ALL 表示所有 CPU 核心,1 是更新間隔(秒)。
使用 sar
sysstat 包中的 sar 工具可以收集、報告和保存系統活動信息。
sar -u 1
其中 -u 表示 CPU 使用率,1 是更新間隔(秒)。
8. 生成圖表
使用 gnuplot
gnuplot 可以將數據繪制成圖表,便于可視化分析。
gnuplot -e "set terminal png; set output 'cpu_usage.png'; plot 'top_output.txt' using 1:9 with lines title 'CPU Usage'"
9. 性能優化建議
優化代碼:改進算法,減少不必要的計算。
調整資源配置:增加 CPU 或內存資源。
負載均衡:分散負載到多個服務器。
緩存機制:引入緩存減少數據庫或磁盤 I/O。
數據庫優化:優化查詢,索引設計,減少鎖競爭。
網絡優化:優化網絡配置,減少網絡延遲。