1. 程式人生 > >雲端計算:Linux運維核心管理命令詳解

雲端計算:Linux運維核心管理命令詳解

雲端計算:Linux運維核心管理命令詳解

想做好運維工作,人先要學會勤快; 
居安而思危,勤記而補拙,方可不斷提高; 
別人資料不論你用著再如何爽那也是別人的; 
自己總結東西是你自身特有的一種思想與理念的展現; 
精髓不是看出來的,精髓是記出來的; 
請同學們在學習的過程中養成好的學習習慣; 
勤於實踐,拋棄教案,勤於動手,整理文件。

一,Linux核心程序管理命令

1.1 ps:檢視程序

1.1.1 命令解釋

功能說明

ps命令用於列出執行ps命令的那個時刻的程序快照,就像用手機給程序照了一張照片。如果想要動態地顯示程序,就需要使用

top命令,該命令類似於把手機切換成錄影模式。

選項說明

引數選項

解釋說明(帶@的為重點)

-a

顯示所有終端下執行的程序

a

顯示與終端相關的所有程序,包含每個程序的完整路徑@

x

顯示與終端無關的所有程序@

u

顯示程序的使用者資訊@

-u

顯示指定使用者相關的程序資訊

-e

顯示所有程序@

-f

額外顯示UIDPPIDCSTIME欄位@

f

顯示程序樹

-H

顯示程序樹

-l

以詳細的格式來顯示程序的狀況

-o

自定義輸出指定的欄位,以逗號分隔

-sort key

key表示為指定欄位排序,預設升序,+key升序,-key降序

1.1.2 使用範例

1ps 命令不接任何引數

  1. [[email protected]_chen ~]# ps
  2. PID TTY          TIME CMD
  3. 1135 pts/0    00:00:00 bash
  4. 1152 pts/0    00:00:00 bash
  5. 1162 pts/0    00:00:00 bash
  6. 1173 pts/0    00:00:00 bash
  7. 1182 pts/0    00:00:00 ps

預設情況下,ps命令不接任何引數時,輸出的是使用者當前所在終端(視窗)的程序,其輸出結果中的各項說明如下。

  • :PID是程序的標識號
  • :TTY是程序所屬的終端控制檯
  • :TIME列是程序所使用的總的CPU時間
  • :CMD列是正在執行的命令列

2ps -ef

  1. [[email protected]_chen ~]# ps -ef    # -e顯示所有程序,-f格外顯示UIDPPIDCSTIME欄位
  2. UID         PID   PPID  C STIME TTY          TIME CMD
  3. root          1      0  0 15:00 ?        00:00:00 /sbin/init
  4. root          2      0  0 15:00 ?        00:00:00 [kthreadd]
  5. root          3      2  0 15:00 ?        00:00:00 [migration/0]
  6. root          4      2  0 15:00 ?        00:00:00 [ksoftirqd/0]
  7. root          5      2  0 15:00 ?        00:00:00 [migration/0]
  8. root          6      2  0 15:00 ?        00:00:00 [watchdog/0]
  9. root          7      2  0 15:00 ?        00:00:00 [events/0]
  10. root          8      2  0 15:00 ?        00:00:00 [cgroup]
  11. root          9      2  0 15:00 ?        00:00:00 [khelper]
  12. root         10      2  0 15:00 ?        00:00:00 [netns]
  13. root         11      2  0 15:00 ?        00:00:00 [async/mgr]
  14. root         12      2  0 15:00 ?        00:00:00 [pm]
  15. root         13      2  0 15:00 ?        00:00:00 [sync_supers]
  16. root         14      2  0 15:00 ?        00:00:00 [bdi-default]
  17. root         15      2  0 15:00 ?        00:00:00 [kintegrityd/0]
  18. root         16      2  0 15:00 ?        00:00:00 [kblockd/0]
  19. root         17      2  0 15:00 ?        00:00:00 [kacpid]

輸出資訊中各列說明如下

  • UID:程序被該UID所擁有
  • PID:程序的標識號
  • PPID:程序的父程序的標識號
  • CCPU使用的資源百分比
  • STIME:程序開始的時間
  • TTY:該程序是在哪個終端機上面運作,若與終端機無關,則顯示,另外,tty1-tty6是本機上面的登入者程序,若為pts/0等,則表示為由網路連線進主機的程序。
  • TIME:程序所使用的總的CPU時間
  • CMD:正在執行的命令列

3ps aux

  1. [[email protected]_chen ~]# ps aux
  2. USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  3. root          1  0.0  0.1  19232  1488 ?        Ss   15:00   0:00 /sbin/init
  4. root          2  0.0  0.0      0     0 ?        S    15:00   0:00 [kthreadd]
  5. root          3  0.0  0.0      0     0 ?        S    15:00   0:00 [migration/0]
  6. root          4  0.0  0.0      0     0 ?        S    15:00   0:00 [ksoftirqd/0]
  7. root          5  0.0  0.0      0     0 ?        S    15:00   0:00 [migration/0]
  8. root          6  0.0  0.0      0     0 ?        S    15:00   0:00 [watchdog/0]
  9. 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)顯示指定使用者的相關程序資訊

  1. [[email protected]_chen ~]# ps -u yunjisuan
  2. PID TTY          TIME CMD
  3. 1315 pts/1    00:00:00 bash
  4. 1335 pts/1    00:00:00 vim

5) 以詳細格式顯示程序狀態

  1. [[email protected]_chen ~]# ps -u yunjisuan -l
  2. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  3. 4 S   500   1315   1314  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  4. 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
  • CCPU使用的資源百分比。
  • PRIPriority(優先執行序)的縮寫
  • NINice
  • ADDR:指出該程序在記憶體的哪個部分。如果是個running的程序,則一般是“-”
  • SZ:使用掉的記憶體大小。
  • WCHAN:目前這個程序是否正在運作當中,若為“-”則表示正在運作。
  • TTY:該程序是在哪個終端機上面運作的,若與終端機無關,則顯示,另外,tty1-tty6是本機上面的登入者程序,若為pts/0等,則表示為由網路連線進主機的程序。
  • TIME:該程序實際使用CPU運作的時間
  • CMD:該程序的實際命令

6)檢視某個程序在哪個CPU上執行

  1. [[email protected]_chen ~]# ps -eo pid,args,psr
  2. PID COMMAND                     PSR
  3. 1 /sbin/init                    0  #CPU標記0代表第一個CPU
  4. 2 [kthreadd]                    0
  5. 3 [migration/0]                 0
  6. 4 [ksoftirqd/0]                 0
  7. 5 [migration/0]                 0
  8. 6 [watchdog/0]                  0
  9. 7 [events/0]                    0
  10. 8 [cgroup]                      0
  11. 9 [khelper]                     0

1.2 kill:終止程序

1.2.1 命令解釋

功能說明

kill命令能夠終止你希望停止的程序

選項說明

引數選項

解釋說明(帶@為重點)

-l

列出全部的訊號名稱

-p

指定kill命令只打印相關程序的程序號,而不傳送任何訊號

-s

指定要傳送的訊號@

1.2.2 使用範例

1)列出所有訊號的名稱

  1. [[email protected]_chen ~]# kill -l
  2. 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
  3. 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
  4. 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
  5. 16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
  6. 21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
  7. 26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
  8. 31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
  9. 38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
  10. 43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
  11. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
  12. 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
  13. 58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
  14. 63) SIGRTMAX-1  64) SIGRTMAX    
  15. [[email protected]_chen ~]# kill -l kill  #可以使用-l引數對訊號名和數字訊號互換
  16. 9
  17. [[email protected]_chen ~]# kill -l 9
  18. KILL

常用訊號:

訊號

說明

HUP1

掛起,通常因終端掉線或使用者退出而引發

INT2

中斷,通常是按下Ctrl+c組合鍵來發出這個訊號

QUIT3

退出,通常是按下CTRL+\組合鍵來發出這個訊號

KILL9

立即結束程序的執行

TERM15

終止,通常在系統關機時傳送

TSTP20

暫停程序的執行,通常是按下Ctrl+z組合鍵來發出這個訊號

2)終止程序

  • kill指令預設使用的訊號為15,用於結束程序。如果程序忽略此訊號,則可以使用訊號9強制終止程序。
  • 一般是先通過ps等命令獲取到要終止程序的程序號,然後直接使用“kill 程序號就可以了。
  1. kill 2203   #kill 命令預設使用的訊號為15,這種格式最常用、
  2. kill -s 15 2203 #這種格式使用-s引數明確指定傳送值為15的訊號,效果和kill 2203一樣
  3. kill -15 2203   #上面的-s 15可以簡寫為-15

如果用上面的方法還是無法終止程序,那麼我們就可以用KILL9)訊號強制終止程序。

  1. kill -9 2203    #訊號9會強行終止程序,這會帶來一些副作用,如資料丟失,或者終端無法恢復到正常狀態等,因此應儘量避免使用,除非程序使用其他訊號無法終止。

3)擴充套件:特殊訊號0的應用案例

kill的所有訊號中,有一個十分特殊的訊號值0,使用格式為kill -0 $pid。其中的-0表示不傳送任何訊號給$pid對應的程序,但是仍然會對$pid是否存在對應的程序進行檢查,如果$pid對應的程序已存在,則返回0,若不存在則返回1

  1. [[email protected]_chen ~]# pgrep -l sshd
  2. 985 sshd
  3. 1131 sshd
  4. [[email protected]_chen ~]# kill -s 0 985
  5. [[email protected]_chen ~]# echo $?
  6. 0
  7. [[email protected]_chen ~]# kill -s 0 986
  8. bash: kill: (986) - No such process
  9. [[email protected]_chen ~]# echo $?
  10. 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,終止該程序的命令如下:

  1. [[email protected]_chen ~]# killall crond
  2. [[email protected]_chen ~]# killall crond #killall終止程序可執行多次
  3. crond: no process killed    #等看到這個結果說明程序死了
  4. [[email protected]_chen ~]# 
  5. [[email protected]_chen ~]# /etc/init.d/crond start   #啟動服務
  6. Starting crond:                                            [  OK  ]
  7. [[email protected]_chen ~]# killall -w crond  #使用-w引數,會看到等待幾秒後結束命令操作
  8. [[email protected]_chen ~]# killall -w crond
  9. crond: no process killed

2)終止指定使用者的所有程序

  1. [[email protected]_chen ~]# ps -u yunjisuan -l    #檢視普通使用者的所有程序詳細資訊
  2. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  3. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  4. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  5. 0 T   500   1235   1210  0  80   0 - 35884 signal pts/1    00:00:00 vim
  6. [[email protected]_chen ~]# killall -u yunjisuan vim  #殺掉指定使用者的vim程序
  7. [[email protected]_chen ~]# ps -u yunjisuan -l    #成功
  8. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  9. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  10. 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)通過程序名終止程序

  1. [[email protected]_chen ~]# /etc/init.d/crond status  #檢視定時任務程式執行狀態
  2. crond (pid  1274) is running...
  3. [[email protected]_chen ~]# pkill crond   #終止定時任務程序
  4. [[email protected]_chen ~]# /etc/init.d/crond status  
  5. crond dead but subsys locked    #程序被終止

2)通過終端名終止程序

  1. [[email protected]_chen ~]# w     #第二列TTY就是使用者執行的終端
  2. 15:57:09 up  1:05,  3 users,  load average: 0.00, 0.00, 0.00
  3. USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT
  4. yunjisua tty1     -                15:55   12.00s  0.02s  0.01s vim ttt
  5. root     pts/0    192.168.200.1    14:51    0.00s  0.07s  0.00s w
  6. root     pts/1    192.168.200.1    15:19    3:28   0.01s  0.00s bash
  7. [[email protected]_chen ~]# ps -u yunjisuan -l    #檢視使用者的程序
  8. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  9. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  10. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  11. 4 S   500   1333   1322  0  80   0 - 27075 wait   tty1     00:00:00 bash
  12. 0 S   500   1359   1333  0  80   0 - 35890 poll_s tty1     00:00:00 vim
  13. [[email protected]_chen ~]# pkill -t tty1     #殺掉終端正在執行的程序
  14. [[email protected]_chen ~]# ps -u yunjisuan -l    #vim程序沒了
  15. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  16. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  17. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  18. 4 S   500   1333   1322  0  80   0 - 27075 n_tty_ tty1     00:00:00 bash
  19. [[email protected]_chen ~]# pkill -9 -t tty1  #強行殺掉tty1終端(踢掉使用者)
  20. [[email protected]_chen ~]# ps -u yunjisuan -l
  21. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  22. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  23. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  24. [[email protected]_chen ~]# w     #tty1終端沒了
  25. 15:58:17 up  1:06,  2 users,  load average: 0.00, 0.00, 0.00
  26. USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT
  27. root     pts/0    192.168.200.1    14:51    0.00s  0.08s  0.00s w
  28. root     pts/1    192.168.200.1    15:19    4:36   0.01s  0.00s bash

3)通過使用者名稱終止程序

  1. [[email protected]_chen ~]# w
  2. 16:08:24 up  1:16,  3 users,  load average: 0.00, 0.00, 0.00
  3. USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT
  4. yunjisua tty1     -                16:01    4.00s  0.03s  0.02s -bash
  5. root     pts/0    192.168.200.1    14:51    0.00s  0.09s  0.00s w
  6. root     pts/1    192.168.200.1    15:19   14:43   0.01s  0.00s bash
  7. [[email protected]_chen ~]# ps -u yunjisuan -l    #檢視使用者的程序資訊
  8. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  9. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  10. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  11. 4 S   500   1387   1366  0  80   0 - 27076 n_tty_ tty1     00:00:00 bash
  12. 0 T   500   1430   1387  0  80   0 - 35883 signal tty1     00:00:00 vim
  13. [[email protected]_chen ~]# pkill -u yunjisuan    #殺掉指定使用者所有程序
  14. [[email protected]_chen ~]# ps -u yunjisuan -l    #成功
  15. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
  16. 4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
  17. 0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
  18. 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)顯示程序資訊

  1. [email protected]_chen ~]# top        #使用top命令通常不接任何引數
  2. top - 16:40:31 up  1:48,  3 users,  load average: 0.00, 0.00, 0.00
  3. Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
  4. 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
  5. Mem:   1004412k total,   152112k used,   852300k free,    11312k buffers
  6. Swap:  2031608k total,        0k used,  2031608k free,    42304k cached
  7. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  8. 1 root      20   0 19232 1536 1256 S  0.0  0.2   0:00.76 init                      
  9. 2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                  
  10. 3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0               
  11. 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)將程序按照使用記憶體排序。

  1. [[email protected]_chen ~]# top -a    #使用引數-a將程序按照使用記憶體排序
  2. top - 18:07:36 up 42 min,  1 user,  load average: 0.00, 0.00, 0.00
  3. Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie
  4. 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
  5. Mem:   1004412k total,   153948k used,   850464k free,    10296k buffers
  6. Swap:  2031608k total,        0k used,  2031608k free,    37868k cached
  7. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  8. 1236 root      20   0 98.0m 4036 3056 S  0.0  0.4   0:00.20 sshd                     
  9. 1209 postfix   20   0 81524 3424 2544 S  0.0  0.3   0:00.01 qmgr                     
  10. 1202 root      20   0 81272 3400 2496 S  0.0  0.3   0:00.03 master                   
  11. 1208 postfix   20   0 81352 3380 2504 S  0.0  0.3   0:00.03 pickup  

3)以批處理模式顯示程序資訊

  1. [[email protected]_chen ~]# top -b        #使用引數-b可以看到命令執行結果不停地向下重新整理
  2. ......
  3. 1229 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  4. 1231 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  5. 1233 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  6. 1235 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  7. 1236 root      20   0 98.0m 4036 3056 S  0.0  0.4   0:00.22 sshd                     
  8. 1243 root      18  -2 12344 2580  516 S  0.0  0.3   0:00.00 udevd                    
  9. 1244 root      18  -2 12344 2584  516 S  0.0  0.3   0:00.00 udevd                    
  10. 1248 root      20   0  105m 1876 1520 S  0.0  0.2   0:00.04 bash                     
  11. 1301 root      20   0 17384  668  452 S  0.0  0.1   0:00.00 anacron                  
  12. 1318 root      20   0 15032 1340  984 R  0.0  0.1   0:00.01 top                      
  13. ^C  #退出使用快捷鍵Ctrl+C

4)顯示程序的完整路徑

  1. [[email protected]_chen chen]# top -c #使用引數-c顯示程序的整個命令路徑。
  2. top - 18:19:38 up 54 min,  1 user,  load average: 0.00, 0.00, 0.00
  3. Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie
  4. 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
  5. Mem:   1004412k total,   154196k used,   850216k free,    10316k buffers
  6. Swap:  2031608k total,        0k used,  2031608k free,    37904k cached
  7. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  8. 1 root      20   0 19232 1484 1220 S  0.0  0.1   0:00.98 /sbin/init               
  9. 2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 [kthreadd]               
  10. 3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 [migration/0] 

5) 設定執行top命令後的資訊重新整理時間

  1. [[email protected]_chen chen]# top -d 3       #使用引數-d指定更新週期為3秒,也就是說命令結果每隔3s重新整理一次

6