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