首頁 > 軟體

Linux下top命令使用詳解

2020-06-16 16:47:24

1.簡介

top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的工作管理員。
顯示系統當前的進程和其他狀況; top是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態.如果在前台執行該命令,它將獨占前台,直到使用者終止該程式為止. 比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人客製化檔案中進行設定。下面詳細介紹它的使用方法。

2.使用方法

2.1 使用格式

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

2.2 引數說明

  • d 指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動命令來改變之。
  • p 通過指定監控進程ID來僅僅監控某個進程的狀態。
  • q 該選項將使top沒有任何延遲的進行重新整理。如果呼叫程式有超級使用者許可權,那麼top將以盡可能高的優先順序執行。
  • S 指定累計模式
  • s 使top命令在安全模式中執行。這將去除互動命令所帶來的潛在危險。
  • i 使top不顯示任何閒置或者僵死進程。
  • c 顯示整個命令列而不只是顯示命令名

2.3 其他

  下面介紹在top命令執行過程中可以使用的一些互動命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,如果在命令列選項中使用了s選項,則可能其中一些命令會被遮蔽掉。
  Ctrl+L 擦除並且重寫螢幕。
  h或者? 顯示幫助畫面,給出一些簡短的命令總結說明。
  k 終止一個進程。系統將提示使用者輸入需要終止的進程PID,以及需要傳送給該進程什麼樣的信號。一般的終止進程可以使用15信號;如果不能正常結束那就使用信號9強制結束該進程。預設值是信號15。在安全模式中此命令被遮蔽。
  i 忽略閒置和僵死進程。這是一個開關式命令。
  q 退出程式。
  r 重新安排一個進程的優先順序別。系統提示使用者輸入需要改變的進程PID以及需要設定的進程優先順序值。輸入一個正值將使優先順序降低,反之則可以使該進程擁有更高的優先權。預設值是10。
  S 切換到累計模式。
  s 改變兩次重新整理之間的延遲時間。系統將提示使用者輸入新的時間,單位為s。如果有小數,就換算成m s。輸入0值則系統將不斷重新整理,預設值是5 s。需要注意的是如果設定太小的時間,很可能會引起不斷重新整理,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。
  f或者F 從當前顯示中新增或者刪除專案。
  o或者O 改變顯示專案的順序。
  l 切換顯示平均負載和啓動時間資訊。
  m 切換顯示記憶體資訊。
  t 切換顯示進程和CPU狀態資訊。
  c 切換顯示命令名稱和完整命令列。
  M 根據駐留記憶體大小進行排序。
  P 根據CPU使用百分比大小進行排序。
  T 根據時間/累計時間進行排序。
W 將當前設定寫入~/.toprc檔案中。這是寫top組態檔的推薦方法。

3.範例解析

前五行是系統整體的統計資訊。

3.1 第一行是任務佇列資訊,同 uptime 命令的執行結果。其內容如下:

  • 10:45:47 當前時間
  • up 61 days 系統執行時間
  • 1 user 當前登入使用者數
  • load average: 6.28, 6.99, 7.18 系統負載,任務佇列的平均長度,即CPU的平均負載情況,三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
    我們任取一列,如第一列,即表示在剛剛過去的1分鐘內:
    如果是單核CPU的話,1.00就表示CPU已經滿負荷了,
    如果是多核CPU的話,load average達到CPU的核數即說明該CPU已經滿負荷了,
    如果是多顆物理CPU,則當load average達到所有物理CPU的總核數時,說明系統CPU滿負荷了。
    簡而言之,CPU的核數即為我們根據load average衡量CPU負載的依據。
    剛剛我們看的是最近1分鐘的負載,load average還顯示了最近5分鐘和15分鐘的負載,那麼一般情況下我們應該看哪個呢?
    其實,1分鐘,5分鐘,15分鐘體現的是剛剛過去15分鐘系統負載的一種趨勢,
    如果1分鐘負載高於5分鐘和15分鐘的負載,說明負載是最近1分鐘發生的,尚未反映到5分鐘和15分鐘的負載上,
    如果在隨後的15分鐘內系統一直維持最近1分鐘的負載,那麼5分鐘和15分鐘的負載也將逐近提高到1分鐘的水平;
    如果隨後的負載沒有繼續維持最近1分鐘的負載,而是降低到原來水平,那麼5分鐘和15分鐘的負載會有微小波動然後維持現有水平。
    如果1分鐘負載低,而5分鐘和15分鐘的負載高,說明最近15分鐘內系統負載高,但是CPU的使用情況在最近的1分鐘降了下來。
    由此看來,1分鐘的資料更能反映CPU負載的實時情況,而15分鐘的資料則說明系統穩定在某一情況,更有指示價值。
    那麼當CPU負載達到哪個值時,就該引起我們注意了呢?按照參考文章給的經驗值是CPU核數乘以0.7,
    即如果CPU總核數為4,當load average上15分鐘的數值達到2.8時,我們就該好好進系統看看了。

3.2 第二、三行為進程和CPU的資訊。當有多個CPU時,這些內容可能會超過兩行。內容如下:

Tasks:

  • 310 total 進程總數
  • 1 running 正在執行的進程數
  • 309 sleeping 睡眠的進程數
  • 0 stopped 停止的進程數
  • 0 zombie 殭屍進程數

Cpu(s):

  • 3.3 us 使用者空間佔用CPU百分比
  • 3.6 sy 核心空間佔用CPU百分比
  • 0.2 ni 使用者進程空間內改變過優先順序的進程佔用CPU百分比
  • 27.1 id 空閒CPU百分比
  • 65.6 wa 等待輸入輸出的CPU時間百分比
  • 0.0 hi hardware irq
  • 0.2 si software irq
  • 0.0 st steal time

3.3 最後兩行為記憶體資訊。內容如下:

Mem:

  • 12304244 total 實體記憶體總量
  • 146240 free 空閒記憶體總量
  • 8502892 used 使用的實體記憶體總量
  • 3655112 buff/cache 用作核心快取的記憶體量
    buffer是即將要被寫入磁碟的,cache是被從磁碟中讀出來的。這二者是為了提高IO效能的,並由OS管理,並非應用自己分配的記憶體,而是OS自己根據需要對空閒記憶體進行的額外利用。因為這部分只是快取,降低IO,提升效能,只要應用程式有需要,OS可以直接將buffer寫入磁碟,將cache刪掉來得到空閒記憶體給應用程式使用。
    buffer是用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的區域。緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反復尋道,從而提高系統效能。
    cache經常被用在磁碟的I/O請求上,如果有多個進程都要存取某個檔案,於是該檔案便被做成cache以方便下次被存取,這樣可提供系統效能。快取(cached)是把讀取過的資料儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。
    使用記憶體是實際當前使用記憶體減去buffers/cache之和;空閒記憶體是實際空閒記憶體加上buffers/cache之和

Swap:

  • 4063228 total 交換區總量
  • 2991268 free 空閒交換區總量
  • 1071960 used 使用的交換區總量
  • 2905240 avail Mem 表示可用於進程下一次分配的實體記憶體數量,這個大小一般比free大一點,因為除了free的空間外,系統還能立即釋放出一些空間來。

備註:
我們在觀察Linux的記憶體使用情況時,只要沒發現用swap的交換空間,就不必擔心自己的記憶體太少。
如果常常看到swap用了很多,那麼你就要考慮加實體記憶體了。這也是在Linux伺服器上看記憶體是否夠用的標準。

3.4 進程資訊區

統計資訊區域的下方顯示了各個進程的詳細資訊。首先來認識一下各列的含義。

序號  列名  含義
a  PID    進程id
b  PPID    父進程id
c  RUSER  Real user name
d  UID    進程所有者的使用者id
e  USER    進程所有者的使用者名稱
f  GROUP  進程所有者的組名
g  TTY    啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h  PR      優先順序
i  NI      nice值。負值表示高優先順序,正值表示低優先順序
j  P      最後使用的CPU,僅在多CPU環境下有意義
k  %CPU    上次更新到現在的CPU時間佔用百分比
l  TIME    進程使用的CPU時間總計,單位秒
m  TIME+  進程使用的CPU時間總計,單位1/100秒
n  %MEM    進程使用的實體記憶體百分比
o  VIRT    進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
p  SWAP    進程使用的虛擬記憶體中,被換出的大小,單位kb。
q  RES    進程使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
r  CODE    可執行程式碼佔用的實體記憶體大小,單位kb
s  DATA    可執行程式碼以外的部分(資料段+棧)占用的實體記憶體大小,單位kb
t  SHR    共用記憶體大小,單位kb
u  nFLT    頁面錯誤次數
v  nDRT    最後一次寫入到現在,被修改過的頁面數。
w  S      進程狀態。
    D=不可中斷的睡眠狀態
    R=執行
    S=睡眠
    T=跟蹤/停止
    Z=殭屍進程
x  COMMAND 命令名/命令列
y  WCHAN  若該進程在睡眠,則顯示睡眠中的系統函數名
z  Flags  任務標誌,參考 sched.h
預設情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容。

更改顯示內容

  • 通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最後按確認鍵確定。
  • 按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按確認鍵確定。
  • 按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-09/153843.htm


IT145.com E-mail:sddin#qq.com