linux系统下top命令的详细用法、参数详解、以及模式配置
用過linux系統的人都知道top命令,它是Linux下一個最常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。
top顯示系統當前的進程和其他狀況,是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態。如果在前臺執行該命令,它將獨占前臺直到用戶終止該程序為止。比較準確的說,top命令提供了實時的對系統處理器的狀態監視。它顯示系統中CPU最“敏感”的任務列表,并可以按CPU使用、內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定。下面就一一道來。
一、命令用法
首先解釋一下該命令的具體用法。
top使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
參數說明:
- d 指定每兩次屏幕信息刷新之間的時間間隔;
- p 通過指定監控進程ID來僅僅監控某個進程的狀態;
- q 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優先級運行;
- S 指定累計模式;
- s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險;
- i 使top不顯示任何閑置或者僵死進程;
- c 顯示整個命令行而不只是顯示命令名;
比如:
top // 每隔5秒顯式所有進程的資源占用情況; top -d 2 // 每隔2秒顯式所有進程的資源占用情況; top -c // 每隔5秒顯式進程的資源占用情況,并顯示進程的命令行參數(默認只有進程名); top -p 12345 -p 6789 // 每隔5秒顯示pid是12345和pid是6789的兩個進程的資源占用情況; top -d 2 -c -p 123456 // 每隔2秒顯示pid是12345的進程的資源使用情況,并顯式該進程啟動的命令行參數;二、實例解讀
然后,我們結合實際的例子,來聊一聊該命令執行過程中所輸出的信息,如何進行解讀:
第一行:運行概覽
top - 09:15:56 up 31 min, 2 users, load average: 0.01, 0.03, 0.05
| 09:15:56 | 當前系統時間 |
| up 31 min | 系統已經運行了31分鐘(在這期間沒有重啟過) |
| 2 users | 當前有2個用戶登錄系統 |
| load average: 0.01, 0.03, 0.05 | 過去1分鐘、5分鐘、15分鐘內系統的負載情況 |
注:load average數據是每隔5秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。
第二行:任務概覽
Tasks: 191 total, 2 running, 189 sleeping, 0 stopped, 0 zombie
這一行比較簡單,就不多解釋了,只說明一點,zombie表示僵尸進程,不理解的可自行百度。
第三行:CPU狀態
%Cpu(s): 0.7 us, 0.5 sy, 0.0 ni, 98.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
| 0.7 us | 用戶空間所占百分比 |
| 0.5 sy | 內核空間所占百分比 |
| 0.0 ni | 改變過優先級的進程所占百分比 |
| 98.8 id | 空閑進程所占百分比 |
| 0.0 wa | IO等待進程所占百分比 |
| 0.0 hi | 硬中斷(Hardware IRQ)所占百分比 |
| 0.0 si | 軟中斷(Software Interrupts)所占百分比 |
| 0.0 st | 虛擬機所占百分比 |
同樣也要說明一點,這里CPU的使用比率和windows概念不同,如果你不理解用戶空間和內核空間,自行百度吧。
第四行:內存狀態
KiB Mem: 3081144 total, 1445648 used, 1635496 free, 323064 buffers
KiB Swap: 4191228 total, 0 used, 4191228 free. 527176 cached Mem
| 3081144 total | 物理內存總量(3G) |
| 1445648 used | 使用中的內存總量(1.38GB) |
| 1635496 free | 空閑內存總量(1.56G) |
| 323064 buffers | 緩存的內存量 (315M) |
| 4191228 total | 交換分區總量(4G) |
| 0 used | 已使用的交換分區(0) |
| 4191228 free | 空閑狀態的交換分區(4G) |
| 527176 cached Mem | 緩沖狀態的交換分區(514K) |
這里要說明一下,我們不能用windows的內存概念來理解這些數據,Linux的內存管理有其特殊性,復雜點需要一本書來說明,這里只是簡單說點和我們傳統概念(windows)的不同。
MEM一行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。
對于內存監控,在top里我們要時刻監控SWAP一行中的已用數值used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
剩余行:進程詳情
首先說明一點,上述命令的顯示狀態,是在Ubuntu 14.04(64位)系統的缺省狀態下所顯示的。在其他的系統下,或者同一個系統的不同設置狀態下,top命令所顯示出來的列項目是有所區別的,有可能與上述圖片中的不一樣。換句話說,top命令其實能顯示非常多的項目信息,遠不止上述圖片中所述,究竟有哪些呢,如下表所述:
| 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 |
從上表可以看出,其實top命令可以顯示的信息列最多有26列,每一列的代號分別對應為a-z,只不過在缺省狀態下,系統只顯示其中比較重要的【PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND】列,而用戶是完全通過指定的方式可以進行隨意增減的。同時,在top命令運行的過程中,還可以進行一些其他的自定義設置,包括刷新速度、排序方式等,那么,究竟應該如何操作呢?請看下節:
三、個性化設置
上文說到,可以在輸入top命令的時候攜帶一些參數來進行配置,可是有時候,輸入top命令的時候,并不很清楚它的運行狀態,有些參數也不知道如何設置,比如排序模式、需要顯示的列等,而是要等到top命令運行起來了,才好進行設置。因此,有沒有一種方法是在top命令運行的過程中,能夠對其顯示的模式、內容等進行臨時的設置呢?
答案當然是有的!下面就介紹一下在top命令執行過程中可以使用的一些交互命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。
- h或者? 顯示幫助畫面,給出一些簡短的命令總結說明;
- k 終止一個進程。系統將提示用戶輸入需要終止的進程PID,以及需要發送給該進程什么樣的信號。一般的終止進程可以使用15信號;如果不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽;
- i 忽略閑置和僵死進程。這是一個開關式命令;
- q 退出程序;
- r 重新安排一個進程的優先級別。系統提示用戶輸入需要改變的進程PID以及需要設置的進程優先級值。輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先權。默認值是10;
- S 切換到累計模式;
- s 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位為s。如果有小數,就換算成ms。輸入0值則系統將不斷刷新,默認值是5s;
- f或者F 從當前顯示中添加或者刪除項目。按下此鍵之后,系統會進入配置界面,顯示出目前所能支持的全部條目,用戶可以進行自定義的刪減和配置;
- o或者O 改變顯示項目的順序;
- l 切換顯示平均負載和啟動時間信息;
- m 切換顯示內存信息;
- t 切換要不要顯示進程和CPU狀態信息這兩行;
- c 切換顯示命令名稱和完整命令行;
- M 根據內存大小進行排序;
- P 根據CPU使用百分比大小進行排序;
- T 根據時間/累計時間進行排序;
- W 將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法;
怎么樣,是不是非常靈活?自己去試試吧?
總結
以上是生活随笔為你收集整理的linux系统下top命令的详细用法、参数详解、以及模式配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux驱动模块命令大全insmod/
- 下一篇: linux下如何使用configure/