雲端計算:Linux運維核心管理命令詳解
雲端計算:Linux運維核心管理命令詳解
想做好運維工作,人先要學會勤快;
居安而思危,勤記而補拙,方可不斷提高;
別人資料不論你用著再如何爽那也是別人的;
自己總結東西是你自身特有的一種思想與理念的展現;
精髓不是看出來的,精髓是記出來的;
請同學們在學習的過程中養成好的學習習慣;
勤於實踐,拋棄教案,勤於動手,整理文件。
一,Linux核心程序管理命令
1.1 ps:檢視程序
1.1.1 命令解釋
功能說明
ps命令用於列出執行ps命令的那個時刻的程序快照,就像用手機給程序照了一張照片。如果想要動態地顯示程序,就需要使用
選項說明
引數選項 |
解釋說明(帶@的為重點) |
-a |
顯示所有終端下執行的程序 |
a |
顯示與終端相關的所有程序,包含每個程序的完整路徑@ |
x |
顯示與終端無關的所有程序@ |
u |
顯示程序的使用者資訊@ |
-u |
顯示指定使用者相關的程序資訊 |
-e |
顯示所有程序@ |
-f |
額外顯示UID,PPID,C與STIME欄位@ |
f |
顯示程序樹 |
-H |
顯示程序樹 |
-l |
以詳細的格式來顯示程序的狀況 |
-o |
自定義輸出指定的欄位,以逗號分隔 |
-sort key |
key表示為指定欄位排序,預設升序,+key升序,-key降序 |
1.1.2 使用範例
(1)ps 命令不接任何引數
- [[email protected]_chen ~]# ps
- PID TTY TIME CMD
- 1135 pts/0 00:00:00 bash
- 1152 pts/0 00:00:00 bash
- 1162 pts/0 00:00:00 bash
- 1173 pts/0 00:00:00 bash
- 1182 pts/0 00:00:00 ps
預設情況下,ps命令不接任何引數時,輸出的是使用者當前所在終端(視窗)的程序,其輸出結果中的各項說明如下。
- :PID是程序的標識號
- :TTY是程序所屬的終端控制檯
- :TIME列是程序所使用的總的CPU時間
- :CMD列是正在執行的命令列
(2)ps -ef
- [[email protected]_chen ~]# ps -ef # -e顯示所有程序,-f格外顯示UID,PPID,C與STIME欄位
- UID PID PPID C STIME TTY TIME CMD
- root 1 0 0 15:00 ? 00:00:00 /sbin/init
- root 2 0 0 15:00 ? 00:00:00 [kthreadd]
- root 3 2 0 15:00 ? 00:00:00 [migration/0]
- root 4 2 0 15:00 ? 00:00:00 [ksoftirqd/0]
- root 5 2 0 15:00 ? 00:00:00 [migration/0]
- root 6 2 0 15:00 ? 00:00:00 [watchdog/0]
- root 7 2 0 15:00 ? 00:00:00 [events/0]
- root 8 2 0 15:00 ? 00:00:00 [cgroup]
- root 9 2 0 15:00 ? 00:00:00 [khelper]
- root 10 2 0 15:00 ? 00:00:00 [netns]
- root 11 2 0 15:00 ? 00:00:00 [async/mgr]
- root 12 2 0 15:00 ? 00:00:00 [pm]
- root 13 2 0 15:00 ? 00:00:00 [sync_supers]
- root 14 2 0 15:00 ? 00:00:00 [bdi-default]
- root 15 2 0 15:00 ? 00:00:00 [kintegrityd/0]
- root 16 2 0 15:00 ? 00:00:00 [kblockd/0]
- root 17 2 0 15:00 ? 00:00:00 [kacpid]
輸出資訊中各列說明如下
- UID:程序被該UID所擁有
- PID:程序的標識號
- PPID:程序的父程序的標識號
- C:CPU使用的資源百分比
- STIME:程序開始的時間
- TTY:該程序是在哪個終端機上面運作,若與終端機無關,則顯示“?”,另外,tty1-tty6是本機上面的登入者程序,若為pts/0等,則表示為由網路連線進主機的程序。
- TIME:程序所使用的總的CPU時間
- CMD:正在執行的命令列
(3)ps aux
- [[email protected]_chen ~]# ps aux
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- root 1 0.0 0.1 19232 1488 ? Ss 15:00 0:00 /sbin/init
- root 2 0.0 0.0 0 0 ? S 15:00 0:00 [kthreadd]
- root 3 0.0 0.0 0 0 ? S 15:00 0:00 [migration/0]
- root 4 0.0 0.0 0 0 ? S 15:00 0:00 [ksoftirqd/0]
- root 5 0.0 0.0 0 0 ? S 15:00 0:00 [migration/0]
- root 6 0.0 0.0 0 0 ? S 15:00 0:00 [watchdog/0]
- root 7 0.0 0.0 0 0 ? S 15:00 0:00 [events/0]
輸出資訊中各列的說明如下
- USER:該程序屬於的使用者。
- PID:該程序的程序號。
- %CPU:該程序使用掉的CPU資源百分比。
- %MEM:該程序所佔用的實體記憶體百分比。
- VSZ:該程序使用掉的虛擬記憶體量(單位Kbytes)
- RSS:該程序佔用的固定的記憶體量(單位Kbytes)
- TTY:該程序是在哪個終端機上面運作的,若與終端機無關,則顯示“?”,另外,tty1-tty6是本機上面的登入者程序,若為pts/0等,則表示為由網路連線進主機的程序。
- STAT:該程序目前的狀態,主要的狀態包括如下幾種。
- R:正在執行,或者是可以執行。
- S:正在終端睡眠中,可以由某些訊號喚醒。
- D:不可中斷睡眠。
- T:正在偵測或者是停止了。
- Z:已經終止,但是其父程序無法正常終止它,從而變成zombie(殭屍)程序的狀態
- +:前臺程序。
- l:多執行緒程序。
- N:低優先順序程序。
- <:高優先順序程序。
- s:程序領導者。
- L:已將頁面鎖定到記憶體中。
- START:該程序被觸發啟動的時間
- TIME:該程序實際使用CPU運作的時間
- COMMAND:該程序的實際命令。
(4)顯示指定使用者的相關程序資訊
- [[email protected]_chen ~]# ps -u yunjisuan
- PID TTY TIME CMD
- 1315 pts/1 00:00:00 bash
- 1335 pts/1 00:00:00 vim
(5) 以詳細格式顯示程序狀態
- [[email protected]_chen ~]# ps -u yunjisuan -l
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1315 1314 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 0 T 500 1335 1315 0 80 0 - 35884 signal pts/1 00:00:00 vim
輸出資訊中各列的說明如下
- F:代表這個程序的標誌(flag),4代表使用者為super user。
- S:代表這個程序的狀態(STAT),前面已經講解過了
- UID:程序被該UID所擁有。
- PID:程序的標識號。
- PPID:父程序的ID。
- C:CPU使用的資源百分比。
- PRI:Priority(優先執行序)的縮寫
- NI:Nice值
- ADDR:指出該程序在記憶體的哪個部分。如果是個running的程序,則一般是“-”。
- SZ:使用掉的記憶體大小。
- WCHAN:目前這個程序是否正在運作當中,若為“-”則表示正在運作。
- TTY:該程序是在哪個終端機上面運作的,若與終端機無關,則顯示“?”,另外,tty1-tty6是本機上面的登入者程序,若為pts/0等,則表示為由網路連線進主機的程序。
- TIME:該程序實際使用CPU運作的時間
- CMD:該程序的實際命令
(6)檢視某個程序在哪個CPU上執行
- [[email protected]_chen ~]# ps -eo pid,args,psr
- PID COMMAND PSR
- 1 /sbin/init 0 #CPU標記0代表第一個CPU
- 2 [kthreadd] 0
- 3 [migration/0] 0
- 4 [ksoftirqd/0] 0
- 5 [migration/0] 0
- 6 [watchdog/0] 0
- 7 [events/0] 0
- 8 [cgroup] 0
- 9 [khelper] 0
1.2 kill:終止程序
1.2.1 命令解釋
功能說明
kill命令能夠終止你希望停止的程序
選項說明
引數選項 |
解釋說明(帶@為重點) |
-l |
列出全部的訊號名稱 |
-p |
指定kill命令只打印相關程序的程序號,而不傳送任何訊號 |
-s |
指定要傳送的訊號@ |
1.2.2 使用範例
(1)列出所有訊號的名稱
- [[email protected]_chen ~]# kill -l
- 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
- 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
- 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
- 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
- 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
- 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
- 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
- 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
- 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
- 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
- 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
- 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
- 63) SIGRTMAX-1 64) SIGRTMAX
- [[email protected]_chen ~]# kill -l kill #可以使用-l引數對訊號名和數字訊號互換
- 9
- [[email protected]_chen ~]# kill -l 9
- KILL
常用訊號:
訊號 |
說明 |
HUP(1) |
掛起,通常因終端掉線或使用者退出而引發 |
INT(2) |
中斷,通常是按下Ctrl+c組合鍵來發出這個訊號 |
QUIT(3) |
退出,通常是按下CTRL+\組合鍵來發出這個訊號 |
KILL(9) |
立即結束程序的執行 |
TERM(15) |
終止,通常在系統關機時傳送 |
TSTP(20) |
暫停程序的執行,通常是按下Ctrl+z組合鍵來發出這個訊號 |
(2)終止程序
- kill指令預設使用的訊號為15,用於結束程序。如果程序忽略此訊號,則可以使用訊號9強制終止程序。
- 一般是先通過ps等命令獲取到要終止程序的程序號,然後直接使用“kill 程序號”就可以了。
- kill 2203 #kill 命令預設使用的訊號為15,這種格式最常用、
- kill -s 15 2203 #這種格式使用-s引數明確指定傳送值為15的訊號,效果和kill 2203一樣
- kill -15 2203 #上面的-s 15可以簡寫為-15
如果用上面的方法還是無法終止程序,那麼我們就可以用KILL(9)訊號強制終止程序。
- kill -9 2203 #訊號9會強行終止程序,這會帶來一些副作用,如資料丟失,或者終端無法恢復到正常狀態等,因此應儘量避免使用,除非程序使用其他訊號無法終止。
(3)擴充套件:特殊訊號0的應用案例
在kill的所有訊號中,有一個十分特殊的訊號值0,使用格式為kill -0 $pid。其中的-0表示不傳送任何訊號給$pid對應的程序,但是仍然會對$pid是否存在對應的程序進行檢查,如果$pid對應的程序已存在,則返回0,若不存在則返回1。
- [[email protected]_chen ~]# pgrep -l sshd
- 985 sshd
- 1131 sshd
- [[email protected]_chen ~]# kill -s 0 985
- [[email protected]_chen ~]# echo $?
- 0
- [[email protected]_chen ~]# kill -s 0 986
- bash: kill: (986) - No such process
- [[email protected]_chen ~]# echo $?
- 1
應用:如果同學們想要寫一個管理系統服務的指令碼,則可以使用這個技巧。
1.3 killall:通過程序名終止程序
1.3.1 命令解釋
功能說明:
使用kill命令終止程序還需要先獲取程序的pid程序號,這個過程有點繁瑣,而使用killall命令就可以直接用“kill 程序名”這種形式終止程序。
選項說明:
引數選項 |
解釋說明(帶@為重點) |
-I |
不區分大小寫匹配 |
-g |
終止屬於該程序組的程序 |
-i |
在終止程序之前詢問是否確認 |
-l |
列出所有已知的訊號名 |
-q |
如果沒有程序終止則不提示 |
-r |
使用正則表示式匹配要終止的程序名稱 |
-s |
用指定的訊號代替預設訊號 |
-u |
終止指定使用者的程序@ |
-v |
報告訊號是否傳送成功 |
-w |
等待所有被終止的程序死去。killall每秒都會檢查一次被終止的程序是否仍然存在,其僅在都死光後才返回。注意,如果訊號被忽略,或者沒有起作用,或者程序停留在殭屍狀態,那麼killall可能會永久等待@ |
1.3.2 使用範例
(1)終止定時任務服務程序的例子
首先我們要知道定時任務的程序名是crond,終止該程序的命令如下:
- [[email protected]_chen ~]# killall crond
- [[email protected]_chen ~]# killall crond #用killall終止程序可執行多次
- crond: no process killed #等看到這個結果說明程序死了
- [[email protected]_chen ~]#
- [[email protected]_chen ~]# /etc/init.d/crond start #啟動服務
- Starting crond: [ OK ]
- [[email protected]_chen ~]# killall -w crond #使用-w引數,會看到等待幾秒後結束命令操作
- [[email protected]_chen ~]# killall -w crond
- crond: no process killed
(2)終止指定使用者的所有程序
- [[email protected]_chen ~]# ps -u yunjisuan -l #檢視普通使用者的所有程序詳細資訊
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 0 T 500 1235 1210 0 80 0 - 35884 signal pts/1 00:00:00 vim
- [[email protected]_chen ~]# killall -u yunjisuan vim #殺掉指定使用者的vim程序
- [[email protected]_chen ~]# ps -u yunjisuan -l #成功
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
特別提示:
這種方式可以終止所有歸屬於yunjisuan使用者的vim程序。在之前,我在給同學們講nginx優化時提到過nginx的監牢模式和在和給同學們講解sudo時提到過企業的集權分治策略,他們都是利用普通使用者來啟動服務。此時,我們可以指定使用者殺死該使用者啟動的某一服務的所有程序。
1.4 pkill:通過程序名終止程序
1.4.1 命令解釋
功能說明:
pkill命令可通過程序名終止指定的程序。使用killall終止程序需要連續執行幾次,而pkill可以殺死指定程序及其所有子程序。
選項說明:
引數選項 |
解釋說明(帶@為重點) |
-t終端 |
殺死指定終端的程序@ |
-u使用者 |
殺死指定使用者的程序@ |
1.4.2 使用範例
(1)通過程序名終止程序
- [[email protected]_chen ~]# /etc/init.d/crond status #檢視定時任務程式執行狀態
- crond (pid 1274) is running...
- [[email protected]_chen ~]# pkill crond #終止定時任務程序
- [[email protected]_chen ~]# /etc/init.d/crond status
- crond dead but subsys locked #程序被終止
(2)通過終端名終止程序
- [[email protected]_chen ~]# w #第二列TTY就是使用者執行的終端
- 15:57:09 up 1:05, 3 users, load average: 0.00, 0.00, 0.00
- USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
- yunjisua tty1 - 15:55 12.00s 0.02s 0.01s vim ttt
- root pts/0 192.168.200.1 14:51 0.00s 0.07s 0.00s w
- root pts/1 192.168.200.1 15:19 3:28 0.01s 0.00s bash
- [[email protected]_chen ~]# ps -u yunjisuan -l #檢視使用者的程序
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 4 S 500 1333 1322 0 80 0 - 27075 wait tty1 00:00:00 bash
- 0 S 500 1359 1333 0 80 0 - 35890 poll_s tty1 00:00:00 vim
- [[email protected]_chen ~]# pkill -t tty1 #殺掉終端正在執行的程序
- [[email protected]_chen ~]# ps -u yunjisuan -l #vim程序沒了
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 4 S 500 1333 1322 0 80 0 - 27075 n_tty_ tty1 00:00:00 bash
- [[email protected]_chen ~]# pkill -9 -t tty1 #強行殺掉tty1終端(踢掉使用者)
- [[email protected]_chen ~]# ps -u yunjisuan -l
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- [[email protected]_chen ~]# w #tty1終端沒了
- 15:58:17 up 1:06, 2 users, load average: 0.00, 0.00, 0.00
- USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
- root pts/0 192.168.200.1 14:51 0.00s 0.08s 0.00s w
- root pts/1 192.168.200.1 15:19 4:36 0.01s 0.00s bash
(3)通過使用者名稱終止程序
- [[email protected]_chen ~]# w
- 16:08:24 up 1:16, 3 users, load average: 0.00, 0.00, 0.00
- USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
- yunjisua tty1 - 16:01 4.00s 0.03s 0.02s -bash
- root pts/0 192.168.200.1 14:51 0.00s 0.09s 0.00s w
- root pts/1 192.168.200.1 15:19 14:43 0.01s 0.00s bash
- [[email protected]_chen ~]# ps -u yunjisuan -l #檢視使用者的程序資訊
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 4 S 500 1387 1366 0 80 0 - 27076 n_tty_ tty1 00:00:00 bash
- 0 T 500 1430 1387 0 80 0 - 35883 signal tty1 00:00:00 vim
- [[email protected]_chen ~]# pkill -u yunjisuan #殺掉指定使用者所有程序
- [[email protected]_chen ~]# ps -u yunjisuan -l #成功
- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
- 4 S 500 1175 1174 0 80 0 - 27076 wait pts/1 00:00:00 bash
- 0 S 500 1210 1175 0 80 0 - 27076 n_tty_ pts/1 00:00:00 bash
- 4 S 500 1387 1366 0 80 0 - 27076 n_tty_ tty1 00:00:00 bash
1.5 top:實時顯示系統中各個程序的資源佔用狀況
1.5.1 命令解釋
功能說明:
top命令用於實時地對系統處理器狀態進行監控,它能夠實時地顯示系統中各個程序的資源佔用狀況。該命令可以按照CPU的使用,記憶體的使用和執行時間對系統任務程序進行排序顯示,同時top命令還可以通過互動式命令進行設定顯示。
選項說明:
引數選項 |
解釋說明(帶@為重點) |
-a |
將程序按照使用記憶體排序 |
-b |
以批處理的模式顯示程序資訊,輸出結果可以傳遞給其他程式或寫入到檔案中。在這種模式下,top命令不會接受任何輸入,一直執行直到達到-n選項設定的閾值,或者按Ctrl+C等組合鍵終止程式 |
-c |
顯示程序的整個命令路徑,而不是隻顯示命令名稱 |
-d |
指定每兩次螢幕資訊重新整理之間的時間間隔 |
-H |
指定這個可以顯示每個執行緒的情況,否則就是程序的總的狀態 |
-i |
不顯示閒置或者僵死的程序資訊 |
-n |
top輸出資訊更新的次數,完成後將退出top命令 |
-p |
顯示指定的程序資訊 |
1.5.2 使用範例
(1)顯示程序資訊
- [email protected]_chen ~]# top #使用top命令通常不接任何引數
- top - 16:40:31 up 1:48, 3 users, load average: 0.00, 0.00, 0.00
- Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
- Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
- Mem: 1004412k total, 152112k used, 852300k free, 11312k buffers
- Swap: 2031608k total, 0k used, 2031608k free, 42304k cached
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 1 root 20 0 19232 1536 1256 S 0.0 0.2 0:00.76 init
- 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
- 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
- 4 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
- 第一行,任務佇列資訊,同uptime命令的執行結果
- 16:40:31 當前系統時間
- up 1:48 系統已經運行了1小時48分
- 3 users 當前有2個使用者登入系統
- load average:0.00, 0.00, 0.00 load average後面三個數分別是1分鐘、5分鐘、15分鐘的平均負載情況
- 第二行,Tasks為任務(程序)。從上面的資訊可以看出,系統現在共有77個程序,其中處於執行狀態的有1個,76個在休眠(sleep),stoped狀態0個,zombie狀態(僵死)的有0個。
- 第三行,CPU狀態資訊
- 0.0%us 使用者空間佔用CPU的百分比
- 0.0%sy 核心空間佔用CPU的百分比
- 0.0%ni 改變過優先順序的程序佔用CPU的百分比
- 100.0%id 空閒CPU百分比
- 0.0%wa I/O等待佔用CPU的百分比
- 0.0%hi 硬中斷(Hardware IRQ)佔用CPU的百分比
- 0.0%si 軟中斷(Software Interrupts)佔用CPU的百分比
- 0.0%st 虛擬機器佔用CPU的百分比
- 第四行,記憶體狀態
- 1004412k total 實體記憶體總量
- 152112k used 使用中的記憶體總量
- 852300k free 空閒記憶體總量
- 11312k buffers 緩衝的記憶體量
- 第五行,swap交換分割槽資訊
- 2031608k total 交換區總量
- 0k used 使用的交換區總量
- 2031608k free 空閒交換區總量
- 42304k cached 快取的記憶體量
- 第六行,空行
- 第七行開始,給出的是各程序(任務)的狀態監控
- PID 程序id
- USER 程序所有者
- PR 程序優先順序
- NI nice值,負值表示高優先順序,正值表示低優先順序。
- VIRT 程序使用的虛擬記憶體總量,單位kb。
- RES 程序使用的、未被換出的實體記憶體大小,單位為kb。
- SHR 共享記憶體大小,單位為kb
- S 程序狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍程序
- %CPU 上次更新到現在的CPU時間佔用百分比
- %MEM 程序使用的實體記憶體百分比
- TIME+ 程序使用的CPU時間總計,單位1/100秒
- COMMAND 程序名稱(命令名/命令列)
特別提示:
1)計算真正可用的記憶體數為:第四行的free+第四行的buffers+第五行的cached
2)在對記憶體進行監控時,我們要時刻關注top命令裡第五行swap交換分割槽的used,如果這個數值還在不斷地變化,則說明核心正在不斷進行記憶體和swap的資料交換,這表示記憶體真的不夠用了或者程式執行有記憶體溢位問題。
(2)顯示多核不同核CPU的資訊
在top基本檢視中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況。
從上圖可以發現,伺服器有8個邏輯CPU,實際上是2個物理CPU。再按數字鍵1,就會返回到top基本檢視介面。
(2)將程序按照使用記憶體排序。
- [[email protected]_chen ~]# top -a #使用引數-a將程序按照使用記憶體排序
- top - 18:07:36 up 42 min, 1 user, load average: 0.00, 0.00, 0.00
- Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombie
- Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
- Mem: 1004412k total, 153948k used, 850464k free, 10296k buffers
- Swap: 2031608k total, 0k used, 2031608k free, 37868k cached
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 1236 root 20 0 98.0m 4036 3056 S 0.0 0.4 0:00.20 sshd
- 1209 postfix 20 0 81524 3424 2544 S 0.0 0.3 0:00.01 qmgr
- 1202 root 20 0 81272 3400 2496 S 0.0 0.3 0:00.03 master
- 1208 postfix 20 0 81352 3380 2504 S 0.0 0.3 0:00.03 pickup
(3)以批處理模式顯示程序資訊
- [[email protected]_chen ~]# top -b #使用引數-b可以看到命令執行結果不停地向下重新整理
- ......
- 1229 root 20 0 4064 576 496 S 0.0 0.1 0:00.00 mingetty
- 1231 root 20 0 4064 576 496 S 0.0 0.1 0:00.00 mingetty
- 1233 root 20 0 4064 576 496 S 0.0 0.1 0:00.00 mingetty
- 1235 root 20 0 4064 576 496 S 0.0 0.1 0:00.00 mingetty
- 1236 root 20 0 98.0m 4036 3056 S 0.0 0.4 0:00.22 sshd
- 1243 root 18 -2 12344 2580 516 S 0.0 0.3 0:00.00 udevd
- 1244 root 18 -2 12344 2584 516 S 0.0 0.3 0:00.00 udevd
- 1248 root 20 0 105m 1876 1520 S 0.0 0.2 0:00.04 bash
- 1301 root 20 0 17384 668 452 S 0.0 0.1 0:00.00 anacron
- 1318 root 20 0 15032 1340 984 R 0.0 0.1 0:00.01 top
- ^C #退出使用快捷鍵Ctrl+C
(4)顯示程序的完整路徑
- [[email protected]_chen chen]# top -c #使用引數-c顯示程序的整個命令路徑。
- top - 18:19:38 up 54 min, 1 user, load average: 0.00, 0.00, 0.00
- Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombie
- Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
- Mem: 1004412k total, 154196k used, 850216k free, 10316k buffers
- Swap: 2031608k total, 0k used, 2031608k free, 37904k cached
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 1 root 20 0 19232 1484 1220 S 0.0 0.1 0:00.98 /sbin/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.00 [migration/0]
(5) 設定執行top命令後的資訊重新整理時間
- [[email protected]_chen chen]# top -d 3 #使用引數-d指定更新週期為3秒,也就是說命令結果每隔3s重新整理一次
(6