top –hv | -abcHimMsS –d delay –n iterations –p pid [, pid …]
top程序提供運行系統的動態實時視圖,它可以顯示系統概要信息以及當前由Linux內核當前管理的任務列表。所示的系統概要信息的類型以及為任務顯示的信息的類型、順序和大小都是用戶可配置的,並且可以在重新啟動時使配置保持不變。
該程序為流程操作提供了有限的交互借口,並未個人配置提供了更廣泛的接口——包括其操作的各個方面。雖然在整個文檔中引用了Top,但是您可以隨意命名任何您希望的程序。新的名稱,可以是別名,將在頂部的顯示器上反映出來,並在讀取和寫入配置文件時使用。
(1).top中一些字段的含義
VIRT:virtual memory usage虛擬內存
1、 進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等
2、 假如進程申請100M的內存,但實際只使用了10M,那么它會增長到100M,而不是實際用的量
RES:resident memory usage常駐內存
1、 進程當前使用的內存大小,但不包括swap out
2、 包含其他進程的共享
3、 如果申請100M內存,實際使用10M,它只增長10M,與VIRT相反
4、 關於庫占用內存的情況,它只統計加載的庫文件所占內存大小
SHR:shared memory共享內存
1、 除了自身進程的共享內存,也包括其他進程的共享內存
2、 雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小
3、 計算摸個進程所占的物理內存公式:RES-SHR
4、 Swap out后,他將會降下來
DATA
1、數據占用的內存。如果投票沒有顯示,按f鍵可以顯示出來
2、真正的該程序要求的數據空間,是真正在運行中要使用的。
(2).選項
-a 按內存使用情況排序。此開關最重要的是按分配內存對進程進行排序。 -b 批處理模式操作。在批處理模式中啟動top,這可以用於將輸出從top發送到其他程序或文件。在此模式下,top將不接受輸入和運行,直到您使用’-n’命令行選項設置的限制迭代次數或直到被殺死。 -c 命令行/程序名稱切換。啟動top反轉(切換)最后記住的’c’狀態。因此,如果top顯示命令行,那么現在該字段顯示程序名稱,反之亦然。 -d 延遲時間間隔為:-d ss.tt(單位秒,允許小數,不允許負數)。指定屏幕更新之間的延遲,並重寫個人配置文件或啟動默認值中相應值。之后可以使用’d’或’s’交互命令來更改這一點。安全模式下只有root可以更改此類(除非使用’s’命令行選項) -h 幫助信息 -H線程切換。啟動top反轉(切換)最后記住的’H’狀態。當切換到On時,將顯示所有淡出的線程。否則,top顯示進程中所有線程的總和。 -i 空閑進程切換。啟動top反轉(切換)最后記住的’i’狀態。當此切換為Off時,將不在顯示空閑或僵屍任務 -m VIRT/USED切換。報告被使用的(進程RSS總數和交換總數),而不是虛擬內存。 -M 檢測內存單元。顯示內存單元(k/M/G)並在內存摘要中顯示浮點數 -n 迭代次數限制為:-n number。指定在結束前應該產生的最大迭代次數或幀數。 -p 監視器PID為:-pN1 –pN2 …或-pN1,N2[,…]。僅監視具有指定進程ID的進程。此選項最多可以給出20次,或者您可以提供最多20個PID的逗號分隔列表。混合這兩種方法是運行的。如果您希望恢復正常操作,只需要發出’=’交互命令。 -s 安全模式操作。強制啟動安全模式,即使是root。通過系統配置文件可以更好地控制此模式。 -S 累計時間模式切換。啟動top反轉(切換)最后記住的’S’狀態。當累計模式為On,每個進程都會列出它和它的死子進程使用的CPU時間。 -u 用戶監控:-u somebody。僅監控與給定的有效UID或用戶名匹配的進程 -U 用戶監控:-U somebody。僅監控與給定的UID或用戶名匹配的進程。這與真實的、有效的、保存的文件系統UID相匹配。 -v 版本信息
(3).交互命令
注意:以下綠色交互命令比較常用
1)全局命令
<回車>/<空格> 刷新顯示
?/h 幫助
= 退出任務限制。刪除顯示任務的限制。此命令將逆轉可能處於活動狀態的任何’i’(空閑任務)和’n’(最大任務命令。)它還提供PID監控的’退出’。
A 備用顯示模式切換。此命令將在全屏模式和更改顯示模式之間切換
B 粗體禁用/啟用切換。此命令將影響“粗體”終端功能的使用,並改變當前窗口的摘要區和任務區(注意:當這個切換為On,並且top在單色模式下運行時,整個顯示將顯示為普通文本。因此除非’x’或’y’切換使用反向強調,否則將沒有視覺上的證明它們是On的。)
d/s 更改延遲時間間隔。系統將提示您輸入顯示更新之間的延遲時間(單位秒)。小數秒是值得的,但不允許使用負數。輸入0導致幾乎連續更新,顯示不令人滿意,因為系統和tty驅動程序視圖滿足最高要求。延遲值與系統負載成反比,因此謹慎設置。如果您希望在任何時候知道當前的延遲時間,只需尋求幫助並在第二行查看系統摘要。
G 選擇另一個窗口或字段組。系統將提示您輸入1到4之間的數字,指定窗口/字段組,該窗口/字段組應該成為“當前”窗口。
I Irix/Solaris模式切換。在“Solaris模式”(’I’切換為關閉)下運行時,任務的CPU使用率將除以CPU的總數。發出此命令后,您將被告知此切換的新狀態。
u 選擇一個用戶。系統將提示您輸入UID或用戶名。僅顯示屬於所選用戶的進程。此選項與有效UID匹配
U 選擇一個用戶。系統將提示您輸入UID或用戶名。僅顯示屬於所選用戶的進程。此選項匹配真實的、有效的、保留的和文件系統的UID
k 殺死一個任務(進程)。系統將提示您輸入PID,然后輸入要發送的信號。如提示中反映的默認信號是SIGTERM。但是,您可以通過號碼或姓名發送任何信號。如果您希望停止殺死進程,可以在PID提示下,按下<Enter>;也可以在信號提示時,按下0。
q 退出
r 重新nice一個任務。系統將提示您輸入PID,然后輸入一個nice值給它。輸入正值將導致進程失去優先級。相反,負值將導致進程更容易被內核查看。
W 編寫配置文件。這將保存所有選項和切換以及當前顯示模式和延遲。通過在退出top前發出此命令,您可以稍后在完全相同的狀態下重新啟動。
Z 更改顏色映射。此鍵將帶您進入一個單獨的屏幕,您可以在其中更改當前窗口或所有窗口的顏色
注意:藍色字體的命令在安全模式下不可用,也不會顯示在1級幫助屏幕上。
2)摘要區命令
l Load Average/Uptime的開關。下圖顯示的紅色的那一行。
m Memory/Swap Usage的開關。下圖顯示的紅色的兩行
注意:在CentOS7中,m變得更加多樣,更加直觀
t Task/CPU States的開關。下圖顯示的紅色區域。如果使用了1命令,CPU States行可能是多行。
注意:在CentOS7中,t變得更加多樣,更加直觀
1 整個/分隔CPU狀態的開關。下圖顯示了兩個之間的不同之處。
注意:如果已將任何窗口的整個摘要區域切換為關閉,則只剩下消息行。這樣您將擁有最大化的可用任務行,但在交替顯示模式下暫時犧牲了全屏模式下的程序名稱或當前窗口名稱。
3)任務區命令
1.任務窗口外觀
b 粗體開關。這個命令影響x和y命令的顯示。並且只有這兩個命令有一個打開才可用。
x 列高亮開關。更改當前排序字段的高亮。
y 行高亮開關。更改正在運行的任務(進程)的高亮。
z 彩色/單色開關。當前窗口顏色在最后使用的配色,白底黑字,黑底白字之間切換。,此命令改變摘要區和任務區,但不影響x,y,b命令。
2.任務窗口內容
c 命令行/程序名切換。無論’Command’是否存在,都需要遵循。
H 線程開關。當此開關打開時,將顯示所有單獨的線程。否則,頂部顯示進程中所有線程的總和。
S 累計時間模式開關。當累計模式打開時,每個進程都列出它和它死去的子進程所使用的cpu時間。當關閉時,分出許多獨立任務的程序將顯得要求不高。對於像“init”或shell這樣的程序是合適的,但對於其他的,比如編譯器,或許不是。嘗試兩個任務窗口共享相同的排序字段,但使用不同的’S’狀態,看看你喜歡哪一個表達。發出此命令后,您將被告知此開關的新狀態。如果你像提前知道累計模式是否有效,只需尋求幫助並查看第二行的窗口摘要。
u 僅顯示特定用戶。將提示您輸入要顯示的用戶名稱。此后在該任務窗口中只顯示用戶ID或可能不會顯示任何任務。稍后如果您希望再次監視所有任務,請重新發布此命令,但只需在提示處按<Enter>,而不是提供名稱。
3.任務窗口大小
i 空閑進程開關。顯示所有任務或只是活動任務。當此開關關閉時,將不會顯示空閑或僵屍進程。如果在交替顯示模式下將該命令應用到最后一個任務顯示,那么它將不會影響窗口的大小,因為所有先前的任務顯示都已被繪制過。
n/# 設置最大任務。系統將提醒您輸入要顯示的任務數。在交替顯示模式下使用時,這個命令可以精確控制每個當前可見任務顯示的大小,最后一個除外。它不會影響最后一個窗口的大小,因為所有先前的任務顯示都已經被繪制。
注意:如果您希望在交替顯示模式下增加上次可見任務顯示的大小,只需減小其上方任務顯示的大小。
4.任務窗口排序
在使用下面的排序規則前,top建議您使用’x’交換命令臨時打開列高亮顯示。這將有助於實際的排序環境符合您的意圖。只有當前排序字段可見時,才會滿足以下交互命令。排序字段不可見的原因可能是:屏幕寬度不夠;’f’交互命令關閉。
< 選擇當前排序字段的左邊一位為新的排序字段。
> 選擇當前排序字段的右邊一位為新的排序字段。
f/F 選擇排序字段。所有字段將會顯示一個單獨的屏幕,字段前方有*表示正在顯示,並且顯示當前的排序字段以及操作幫助。上下鍵選擇,左右鍵以及<Enter>鍵排序(右鍵選中整個字段,然后上下鍵移動,最后使用左鍵或<Enter>鍵退出字段排序),s鍵確認,d鍵或<Space>鍵開關字段是否顯示,q鍵或<Esc>鍵退出。
M 按%MEM排序
N 按PID排序
P 按%CPU排序
T 按TIME+排序
R 反向/正常排序字段切換。使用此交互命令,您可以在從高到底或從低到高的排序之間切換。
注意:字段排序使用內部值,而不是列顯示中的值。因此,TTY和WCHAN字段將違反嚴格的ASCII排序順序。
4)顏色映射
當您發出’Z’交互命令時,您將看到一個單獨的屏幕。在返回top顯示前,該屏幕可用於更改當前窗口或所有窗口的顏色。在這個單獨的屏幕中顯示4個大寫字母選擇目標,8個數字選擇顏色。同時還有B表示加粗的開關,b表示運行任務粗體開關,z表示顏色/單色的切換,<Enter>表示應用並退出,a/w表示申請和轉到下一個/上一個,q表示放棄更改並退出。
(4).實例
[root@CentOS6 桌面]# top top - 02:18:19 up 10:07, 3 users, load average: 0.79, 0.70, 0.65 Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie Cpu(s): 2.8%us, 1.5%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1907300k total, 1127804k used, 779496k free, 54300k buffers Swap: 4095996k total, 0k used, 4095996k free, 407984k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2053 root 20 0 243m 76m 13m S 13.6 4.1 5:59.58 Xorg 2665 root 20 0 348m 18m 11m S 11.0 1.0 1:03.91 gnome-terminal 2739 root 20 0 1252m 289m 53m S 7.3 15.5 25:59.39 firefox 4 root 20 0 0 0 0 S 0.3 0.0 0:01.53 ksoftirqd/0 5486 root 20 0 15032 1288 936 R 0.3 0.1 0:00.09 top 1 root 20 0 19352 1548 1228 S 0.0 0.1 0:02.38 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.44 migration/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.09 watchdog/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.08 migration/1 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1 9 root 20 0 0 0 0 S 0.0 0.0 0:01.17 ksoftirqd/1 10 root RT 0 0 0 0 S 0.0 0.0 0:00.19 watchdog/1 11 root 20 0 0 0 0 S 0.0 0.0 0:22.94 events/0 12 root 20 0 0 0 0 S 0.0 0.0 0:04.39 events/1 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
摘要區字段解析:
1)任務行信息,同uptime命令的執行結果
top - 02:18:19 當前系統時間,會隨着屏幕更新而更新
up 10:07 系統持續運行時間,hh:mm(小時:分鍾)
3 users 3個用戶
load average: 0.79, 0.70, 0.65 系統負載,即任務列表的平均長度
2)任務(進程)
Tasks:174 total 總進程數
1 running 正在運行的進程數
173 sleeping 睡眠的進程數
0 stopped 停止的進程數
0 zombie 僵屍進程數
3)CPU狀態信息
Cpu(s): 2.8%us 用戶進程占用CPU百分比
1.5%sy 內核進程占用CPU百分比
0.0%ni 用戶進程空間內改變過優先級的進程占用CPU百分比
95.7%id 空閑CPU百分比
0.0%wa 等待I/O(輸入輸出)完成的時間
0.0%hi(了解) 維護硬中斷(Hardware IRQ)所花費的時間。硬中斷是由硬件產生的,比如磁盤、網卡、鍵盤、時鍾等。每個設備或設備集都有自己的IRQ(中斷請求)。基於IRQ,CPU可以將相應的請求分發到對應的硬件驅動上。注:硬件驅動通常是內核中的一個子程序,而不是獨立的進程。
0.0%si(了解) 維護軟中斷(Software Interrupts)所花費的時間。通常軟中斷是一些對I/O(輸入輸出)請求。這些請求會調用內核中可以調度I/O發生的程序。對於某些設備,I/O請求需要被立即處理,而磁盤I/O請求通常可以排隊並且可以稍后處理。根據I/O模型的不同進程或許會被掛起直到I/O完成,此時內核調度器就會選擇另一個進程去運行。I/O可以在進程之間產生並且調度,過程通常和磁盤I/O的方式相同。
0.0%st 虛擬機偷取物理的時間。比如:物理機已經運行了KVM,XEN虛擬機。KVM虛擬機占用物理機CPU的時間。
4)內存信息
Mem: 1907300k total 物理內存總量
1127804k used 已使用的物理內存總量
779496k free 空閑內存總量
54300k buffers 緩存的內存量
5)swap交換分區信息
Swap: 4095996k total 交換區總量
0k used 使用的交換區總量
4095996k free 空閑的交換區總量
407984k cached 緩存的交換區總量,即可用交換區內存
注意1:在CentOS7中,buffers和cached合並為buffers/cached。並且多出一個avail Mem總的可利用內存。
注意2:4)和5)還可以使用free命令直接查看
注意3:如果swap分區被使用,那么表明內存不夠用了。
任務(進程)區字段解析:
PID 進程ID。任務的唯一進程ID,它周期性封裝,但不會從0開始啟動 PPID 父進程ID。任務的父進程ID RUSER 真正的用戶名。任務所有者的真實用戶名 UID 用戶ID。任務所有者有效的用戶ID USER 用戶名。任務所有者的有效用戶名 GROUP 組名。任務所有者的有效組名 TTY 控制終端。控制終端的名稱。它通常是啟動進程的設備(串行接口,PTY虛擬終端等),用於輸入輸出。然而,任務不必與終端聯系,這時你會看到顯示的是’?’ PR 優先級。任務的優先級 NI nice值。任務的nice值。一個負的nice值意味着更高的優先級,而一個正的nice值意味着較低的優先級。在這個字段中0意味着在確認任務的調度時不會調整優先級。 P 最后使用的CPU,僅在多CPU環境下有意義。 %CPU CPU的使用。任務在上次屏幕刷新后經過的CPU時間占總CPU時間的百分比。 TIME CPU時間(單位秒)。任務自啟動以來使用的總CPU時間。當’累計模式’為On時,每個進程將列出其及其死亡的子進程使用的CPU時間。 TIME+ CPU時間,百分之一秒。與TIME相同但精確到百分位。 %MEM 內存使用量(RES)。任務當前使用的可用物理內存份額(百分比) VIRT 虛擬鏡像(單位kb)。任務所使用的虛擬內存總量。它包括所有代碼、數據和共享庫以及已被交換的頁面。VIRT=SWAP+RES(注意你可以定義環境變量STATSIZE=1,VIRT將從proc/#/status VmSwap字段計算。(這時只有SWAP了)) SWAP 交換內存(單位kb)。每個進程交換值取自proc/#/status VmSwap RES 常駐內存(單位kb)。一個任務使用的非交換物理內存。RES=CODE+DATA CODE 代碼大小(單位kb)。專用於可執行代碼的物理內存量,也稱為’文本駐留集’大小或TRS。 DATA 數據+棧大小(單位kb)。除了可執行代碼之外的物理內存量,也稱為’數據駐留集’大小或DRS。 SHR 共享內存大小(單位kb)。任務使用的共享內存量。它只是反映了可能與其他進程共享的內存。 nFLT 頁面錯誤計數。任務發生的主要頁面錯誤數。當進程嘗試讀取或寫入當前不存在於其地址空間中的虛擬頁面時,會發生頁面錯誤。一個主要頁面錯誤是在使該頁面可用時涉及磁盤訪問。 nDRT 臟頁計數。自上次寫入磁盤以來被修改的頁面數。必須先將臟頁寫入磁盤,然后才能將相應的物理內存位置用於其他虛擬頁面。 S 進程狀態。D=不間斷睡眠,R=正在運行,S=睡眠,T=追蹤或停止,Z=僵屍(進程)。顯示為正在運行的任務應該更恰當地被認為是准備運行——它們的task_struct只是在Linux運行隊列中表示。甚至沒有真正的SMP機器,你也能會在此狀態下看到許多任務,這具體取決於top的延遲間隔和nice值。 Command 命令行或程序名。顯示用於啟動任務的命令行或相關程序名稱。您可以使用’c’在命令行和名稱之間切換,它即是命令行選項,又是交互式命令。 WCHAN 睡眠中的功能。根據內核鏈接映射(’Stase.map’)的可用性,這個字段將顯示任務當前正在休眠的內核函數的名稱或地址。運行的任務將在本專欄中顯示一個破折號(’-’)。 Flags 任務標志。此列表示任務的當前調度標志,以十六進制符號表示,並且包含0。這些標志在<linux/sched.h>中正式記錄。也可以在“字段選擇”和“訂單字段”屏幕上找到不太正式的文檔。
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 幾個列!
(5).擴展
1).在Linux系統中一個進程最多可以使用100%CPU嗎?
答案是可以的,比如說4核的CPU,那么上限是400%。