TOP命令詳解
一、top命令介紹
??相信每個運維人員都遇到過的事情就是服務(wù)器的負載突然飆升,碰到這種情況,大家第一反應(yīng)一定是登到服務(wù)器上,先敲一個top命令看看load average吧。在Linux操作系統(tǒng)中,top是使用最頻繁,也是信息比較全的一個命令,它對于所有正在運行的進行和系統(tǒng)負荷提供不斷更新的概覽信息,包括系統(tǒng)負載、CPU利用分布情況、內(nèi)存使用、每個進程的資源占用情況等信息,今天這篇文章和大家說說怎么看懂top命令。
二、top命令輸出結(jié)果解析
執(zhí)行top命令后,默認會出現(xiàn)如下內(nèi)容:
top命令輸出了很多參數(shù),真正的服務(wù)器負載情況我們要綜合其他參數(shù)一起看,運行結(jié)果可以分為兩部分:
第一部分是前5行,是系統(tǒng)整體的統(tǒng)計信息;
第二部分是第8行開始的進程信息,我們從上往下逐行依次進行說明。
2.1、系統(tǒng)整體的統(tǒng)計信息
第一行:
top - 16:20:38 up 12 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05
- top:當前時間
- up:機器運行了多長時間
- users:當前登錄用戶數(shù)
- load average:系統(tǒng)負載,即任務(wù)隊列的平均長度。三個數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。
這里具體需要關(guān)注的還是load average三個數(shù)值。先來說說定義吧:在一段時間內(nèi),CPU正在處理以及等待CPU處理的進程數(shù)之和。三個數(shù)字分別代表了1分鐘,5分鐘,15分鐘的統(tǒng)計值,這個數(shù)值的確能反應(yīng)服務(wù)器的負載情況。但是,這個數(shù)值高了也并不能直接代表這臺機器的性能有問題,可能是因為正在進行CPU密集型的計算,也有可能是因為I/O問題導致運行隊列堵了。所以,當我們看到這個數(shù)值飆升的時候,還得具體問題具體分析。大家都知道,一個CPU在一個時間片里面只能運行一個進程,CPU核數(shù)的多少直接影響到這臺機器在同時間能運行的進程數(shù)。所以一般來說Load Average的數(shù)值別超過這臺機器的總核數(shù),就基本沒啥問題。
第二行:
Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie
- Tasks:當前有多少進程
- running:正在運行的進程數(shù)
- sleeping:正在休眠的進程數(shù)
- stopped:停止的進程數(shù)
- zombie:僵尸進程數(shù)
這里running越多,服務(wù)器自然壓力就越大。
第三行:
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0si, 0.0 st
- us:用戶空間占CPU的百分比(像shell程序、各種語言的編譯器、各種應(yīng)用、web服務(wù)器和各種桌面應(yīng)用都算是運行在用戶地址空間的進程,這些程序如果不是處于idle狀態(tài),那么絕大多數(shù)的CPU時間都是運行在用戶態(tài))
- sy: 內(nèi)核空間占CPU的百分比(所有進程要使用的系統(tǒng)資源都是由Linux內(nèi)核處理的,對于操作系統(tǒng)的設(shè)計來說,消耗在內(nèi)核態(tài)的時間應(yīng)該是越少越好,在實踐中有一類典型的情況會使sy變大,那就是大量的IO操作,因此在調(diào)查IO相關(guān)的問題時需要著重關(guān)注它)
- ni:用戶進程空間改變過優(yōu)先級(ni是nice的縮寫,可以通過nice值調(diào)整進程用戶態(tài)的優(yōu)先級,這里顯示的ni表示調(diào)整過nice值的進程消耗掉的CPU時間,如果系統(tǒng)中沒有進程被調(diào)整過nice值,那么ni就顯示為0)
- id: 空閑CPU占用率
- wa: 等待輸入輸出的CPU時間百分比(和CPU的處理速度相比,磁盤IO操作是非常慢的,有很多這樣的操作,比如,CPU在啟動一個磁盤讀寫操作后,需要等待磁盤讀寫操作的結(jié)果。在磁盤讀寫操作完成前,CPU只能處于空閑狀態(tài)。Linux系統(tǒng)在計算系統(tǒng)平均負載時會把CPU等待IO操作的時間也計算進去,所以在我們看到系統(tǒng)平均負載過高時,可以通過wa來判斷系統(tǒng)的性能瓶頸是不是過多的IO操作造成的)
- hi: 硬中斷占用百分比(硬中斷是硬盤、網(wǎng)卡等硬件設(shè)備發(fā)送給CPU的中斷消息,當CPU收到中斷消息后需要進行適當?shù)奶幚?消耗CPU時間)。)
- si:軟中斷占用百分比(軟中斷是由程序發(fā)出的中斷,最終也會執(zhí)行相應(yīng)的處理程序,消耗CPU時間)
- st:steal time
第四行:
KiB Mem : 1863012 total, 1286408 free, 216532 used, 360072 buff/cache
- total:物理內(nèi)存總量
- free:空閑內(nèi)存量
- used:使用的內(nèi)存量
- buffer/cache:用作內(nèi)核緩存的內(nèi)存量
第五行:
KiB Swap: 5242876 total, 7999484 free, 0 used. 1468240 avail Mem
- total:交換區(qū)內(nèi)存總量
- free:空閑交換區(qū)總量
- used:使用的交換區(qū)總量
- buffer/cache:緩沖的交換區(qū)總量
第四第五行分別是內(nèi)存信息和swap信息,所有程序的運行都是在內(nèi)存中進行的,所以內(nèi)存的性能對與服務(wù)器來說非常重要。不過當內(nèi)存的free變少的時候,其實我們并不需要太緊張。真正需要看的是Swap中的used信息。Swap分區(qū)是由硬盤提供的交換區(qū),當物理內(nèi)存不夠用的時候,操作系統(tǒng)才會把暫時不用的數(shù)據(jù)放到Swap中。所以當這個數(shù)值變高的時候,說明內(nèi)存是真的不夠用了。
2.2、進程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21829 root 20 0 0 0 0 S 0.7 0.6 129:53.91 java
22559 root 20 0 158920 5628 4268 S 0.3 9.2 139:42.81 java
22598 root 20 0 162112 2208 1540 S 0.3 0.1 0:04.68 fluentd
PID 進程id
USER 進程所有者的用戶名
PR 優(yōu)先級
NI nice值,負值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT 進程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES 進程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR 共享內(nèi)存大小,單位kb
S 進程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程
%CPU 上次更新到現(xiàn)在的CPU時間占用百分比
%MEM 進程使用的物理內(nèi)存百分比
TIME+ 進程使用的CPU時間總計,單位1/100秒
COMMAND 命令名/命令行
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列,還有一些參數(shù),例如:
PPID 父進程id
GROUP 進程所有者的組名
SWAP: 進程使用的虛擬內(nèi)存中被換出的大小
CODE 可執(zhí)行代碼占用的物理內(nèi)存大小,單位kb
DATA 可執(zhí)行代碼以外的部分(數(shù)據(jù)段+棧)占用的物理內(nèi)存大小,單位kb
nFLT 頁面錯誤次數(shù)
nDRT 最后一次寫入到現(xiàn)在,被修改過的頁面數(shù)。
WCHAN 若該進程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
Flags 任務(wù)標志
三、top命令使用
3.1、更改顯示內(nèi)容
通過按 f 鍵可以編輯顯示內(nèi)容,按f鍵后,會出現(xiàn)下圖:
根據(jù)上圖可知:
①當前是按照%CPU這一列來排序的
②可以通過上、下鍵來選擇
③按右鍵可以選擇整個列,然后按上、下鍵來移動整個列的顯示位置,前移或后移,按回車確定
④按空格鍵來顯示或隱藏該列,帶*的是顯示,不帶*的是不顯示
⑤按s鍵可以將當前列設(shè)置為排序列
⑥按q鍵退出
3.2、top常用參數(shù)
top命令的格式為:
top [選項]
top命令常用的選項參數(shù):
選項 | 功能 |
---|---|
-d | 指定每兩次屏幕信息刷新之間的時間間隔,如希望每秒刷新一次,則使用:top -d 1 |
-p | 通過指定PID來僅僅監(jiān)控某個進程的狀態(tài) |
-S | 指定累計模式 |
-s | 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險 |
-i | 使top不顯示任何閑置或者僵死的進程 |
-c | 顯示整個命令行而不只是顯示命令名 |
例如:
top 每隔3秒顯式所有進程的資源占用情況
top -d 1 每隔1秒顯式所有進程的資源占用情況
top -c 每隔3秒顯式進程的資源占用情況,并顯示進程的命令行參數(shù)(默認只有進程名)
top -p 28820 -p 38830 每隔3秒顯示pid是28820和pid是38830的兩個進程的資源占用情況
top -d 2 -c -p 69358 每隔2秒顯示pid是69358的進程的資源使用情況,并顯式該進程啟動的命令行參數(shù)
3.3、top的交互命令
默認進入top時,各進程是按照CPU的占用量來排序的
【1】敲top后,按鍵盤數(shù)字“1”可以監(jiān)控每個邏輯CPU的狀況:
【2】敲top后,輸入u,然后輸入用戶名,則可以查看相應(yīng)的用戶進程;
【3】敲top后,top命令默認以K為單位顯示內(nèi)存大小,我們可以通過大寫字母E來切換內(nèi)存信息區(qū)域的顯示單位,如下按一下E切換到MB
再按一下E切換到GB:
【4】敲top后,輸入h進入top命令的幫助文檔,了解更多關(guān)于top的用法。
top當然是我們最常見的查看系統(tǒng)狀況的命令。其他命令還有很多,比如vmstat,w,uptime ,iostat這些都是常用的命令。文章來源:http://www.zghlxwxcb.cn/news/detail-777175.html
綜上
top命令具有非常強大的功能,看懂這些具體參數(shù)以后,就知道自己的代碼到底哪方面需要改進了,是優(yōu)化內(nèi)存消耗,還是優(yōu)化你的代碼邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-777175.html
??????結(jié)束語??????
??支持博主:請點贊??+收藏??+留言??
到了這里,關(guān)于TOP命令參數(shù)詳解---10分鐘學會top用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!