top參數詳解


第一行, 任務隊列信息, 同 uptime 命令的執行結果

  • 系統時間:15:57:40
  • 運行時間:up 6 days, 4:30
  • 當前登錄用戶: 3 user
  • 負載均衡(uptime) load average: 0.22, 0.25, 0.23
    load average 后面的三個數分別是1分鍾、5分鍾、15分鍾的負載情況。load average數據是每隔5秒鍾檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了

第二行, Tasks — 任務(進程)

  • 總進程:234 total, 運行:1 running, 休眠:232 sleeping, 停止: 1 stopped, 僵屍進程: 0 zombie

第三行, cpu狀態信息

  • 1.0%us【user space】— 用戶空間占用CPU的百分比。
  • 0.6%sy【sysctl】— 內核空間占用CPU的百分比。
  • 0.0%ni【】— 改變過優先級的進程占用CPU的百分比
  • 98.4%id【idolt】— 空閑CPU百分比
  • 0.0%wa【wait】— IO等待占用CPU的百分比
  • 0.0%hi【Hardware IRQ】— 硬中斷占用CPU的百分比
  • 0.0%si【Software Interrupts】— 軟中斷占用CPU的百分比

第四行, 內存狀態

32780168 total,  279136 free, 20911624 used, 11589408 buff/cache

第五行, swap交換分區信息

2097148 total, 2097148 free, 0 used. 11307284 avail Mem

可用內存=free + buffer + cached

對於內存監控, 在top里我們要時刻監控第五行swap交換分區的used, 如果這個數值在不斷的變化, 說明內核在不斷進行內存和swap的數據交換, 這是真正的內存不夠用了。

第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,第四行中空閑內存總量(free)是內核還未納入其管控范圍的數量。

納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。

第六行, 空行

第七行以下:各進程(任務)的狀態監控

PID — 進程id
USER — 進程所有者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S            進程狀態,D:不可中斷的睡眠狀態,R:運行,S:睡眠,T:跟蹤/停止,Z:僵屍進程
%CPU    進程使用的CPU占用百分比
%MEM   進程使用的物理內存百分比
TIME+    進程使用的CPU時間總計
COMMAND — 進程名稱(命令名/命令行)

常用快捷鍵

h    顯示快捷鍵幫助
k    終止一個進程
i     開/關忽略閑置和僵死進程
q    退出程序
r     重新安排一個進程的優先級別
S      切換到累計模式
s    更改刷新間隔時間,單位秒
f,F      從當前顯示中添加或者刪除項目
o,O     改變顯示項目的順序
l     切換顯示平均負載和啟動時間信息
m     切換顯示內存信息
M     根據內存使用大小排序
t     切換顯示進程和CPU狀態信息
c    切換顯示命令名稱和完整命令行
P      根據CPU使用率進行排序 (默認排序)
T    根據時間/累計時間進行排序
w    將當前設置寫入~/.toprc文件中
1    展開多核cpu顯示

top使用方法

使用格式:

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

參數說明:

d:指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。

p:通過指定監控進程ID來僅僅監控某個進程的狀態。

q:該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優先級運行。

S:指定累計模式。

s:使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。

i:使top不顯示任何閑置或者僵死進程。

c:顯示整個命令行而不只是顯示命令名。

生產 CPU 高負載問題排查

1.top -c 將系統資源使用情況實時顯示出來(-c 參數可以完整顯示命令)

2. 輸入大寫 P 將應用按照 CPU 使用率排序

3. top -Hp pid 然后輸入 P 可以按照 CPU 使用率將線程排序

4. 將線程的 ID 轉換為 16 進制(printf "%x\n" PID), 通過 jstack pid >pid.log 生成日志文件,利用剛才的 16 進制進程 ID 去這個線程快照中搜索即可知道消耗 CPU 的線程在干啥了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM