top命令

ps 命令可以一次性給出當前系統(tǒng)中進程狀態(tài),但使用此方式得到的信息缺乏時效性,并且,如果管理員需要實時監(jiān)控進程運行情況,就必須不停地執(zhí)行 ps 命令,這顯然是缺乏效率的。

為此,Linux?提供了?top 命令。top 命令可以動態(tài)地持續(xù)監(jiān)聽進程地運行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據(jù)需要,人性化地定制自己的輸出,進而更清楚地了進程的運行狀態(tài)。

top 命令的基本格式如下:

[root@localhost ~]#top [選項]

選項:

-d 秒數(shù):指定 top 命令每隔幾秒更新。默認是 3 秒;

-b:使用批處理模式輸出。一般和"-n"選項合用,用于把 top 命令重定向到文件中;

-n 次數(shù):指定 top 命令執(zhí)行的次數(shù)。一般和"-"選項合用;

-p 進程PID:僅查看指定 ID 的進程;

-s:使 top 命令在安全模式中運行,避免在交互模式中出現(xiàn)錯誤;

-u 用戶名:只監(jiān)聽某個用戶的進程;

在 top 命令的顯示窗口中,還可以使用如下按鍵,進行一下交互操作:

? 或 h:顯示交互模式的幫助;

P:按照 CPU 的使用率排序,默認就是此選項;

M:按照內(nèi)存的使用率排序;

N:按照 PID 排序;

T:按照 CPU 的累積運算時間排序,也就是按照 TIME+ 項排序;

k:按照 PID 給予某個進程一個信號。一般用于中止某個進程,信號 9 是強制中止的信號;

r:按照 PID 給某個進程重設(shè)優(yōu)先級(Nice)值;

q:退出 top 命令;

我們看看 top 命令的執(zhí)行結(jié)果,如下:

[root@localhost ~]# top

top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00

Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st

Mem: 625344k total, 571504k used, 53840k free, 65800k buffers

Swap: 524280k total, 0k used, 524280k free, 409280k cached

PID USER PR Nl VIRT RES SHR S %CPO %MEM TIME+ COMMAND

19002 root 20 0 2656 1068 856 R 0.3 0.2 0:01.87 top

1 root 20 0 2872 1416 1200 S 0.0 0.2 0:02.55 init

2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 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.15 ksoftirqd/0

5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0

6 root RT 0 0 0 0 S 0.0 0.0 0:10.01 watchdog/0

7 root 20 0 0 0 0 S 0.0 0.0 0:05.01 events/0

8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup

9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper

10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns

11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr

12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm

13 root 20 0 0 0 0 S 0.0 0.0 0:01.70 sync_supers

14 root 20 0 0 0 0 S 0.0 0.0 0:00.63 bdi-default

15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0

16 root 20 0 0 0 0 S 0.0 0.0 0:02.52 kblockd/0

17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid

18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify

我們解釋一下命令的輸出。top 命令的輸出內(nèi)容是動態(tài)的,默認每隔 3 秒刷新一次。命令的輸出主要分為兩部分:

第一部分是前五行,顯示的是整個系統(tǒng)的資源使用狀況,我們就是通過這些輸出來判斷服務(wù)器的資源使用狀態(tài)的;

第二部分從第六行開始,顯示的是系統(tǒng)中進程的信息;

我們先來說明第一部分的作用。

第一行為任務(wù)隊列信息,具體內(nèi)容如表 1 所示。

表 1 任務(wù)隊列信息

內(nèi)?容說?明

12:26:46系統(tǒng)當前時間

up 1 day, 13:32系統(tǒng)的運行時間.本機己經(jīng)運行 1 天 13 小時 32 分鐘

2 users當前登錄了兩個用戶

load average: 0.00,0.00,0.00系統(tǒng)在之前 1 分鐘、5 分鐘、15 分鐘的平均負載。如果 CPU 是單核的,則這個數(shù)值超過 1 就是高負載:如果 CPU 是四核的,則這個數(shù)值超過 4 就是高負載 (這個平均負載完全是依據(jù)個人經(jīng)驗來進行判斷的,一般認為不應(yīng)該超過服務(wù)器 CPU 的核數(shù))

第二行為進程信息,具體內(nèi)容如表 2 所示。

表 2 進程信息

內(nèi)?容說?明

Tasks: 95 total系統(tǒng)中的進程總數(shù)

1 running正在運行的進程數(shù)

94 sleeping睡眠的進程數(shù)

0 stopped正在停止的進程數(shù)

0 zombie僵尸進程數(shù)。如果不是 0,則需要手工檢查僵尸進程

第三行為 CPU 信息,具體內(nèi)容如表 3 所示。

表 3 CPU信息

內(nèi)?容說?明

Cpu(s): 0.1 %us用戶模式占用的 CPU 百分比

0.1%sy系統(tǒng)模式占用的 CPU 百分比

0.0%ni改變過優(yōu)先級的用戶進程占用的 CPU 百分比

99.7%id空閑 CPU 占用的 CPU 百分比

0.1%wa等待輸入/輸出的進程占用的 CPU 百分比

0.0%hi硬中斷請求服務(wù)占用的 CPU 百分比

0.1%si軟中斷請求服務(wù)占用的 CPU 百分比

0.0%stst(steal time)意為虛擬時間百分比,就是當有虛擬機時,虛擬 CPU 等待實際?CPU 的時間百分比

第四行為物理內(nèi)存信息,具體內(nèi)容如表 4 所示。

表 4 物理內(nèi)存信息

內(nèi)?容說?明

Mem: 625344k total物理內(nèi)存的總量,單位為KB

571504k used己經(jīng)使用的物理內(nèi)存數(shù)量

53840k&ee空閑的物理內(nèi)存數(shù)量。我們使用的是虛擬機,共分配了?628MB內(nèi)存,所以只有53MB的空閑內(nèi)存

65800k buffers作為緩沖的內(nèi)存數(shù)量

第五行為交換分區(qū)(swap)信息,如表 5 所示。

表 5 交換分區(qū)信息

內(nèi)?容說?明

Swap: 524280k total交換分區(qū)(虛擬內(nèi)存)的總大小

Ok used已經(jīng)使用的交換分區(qū)的大小

524280k free空閑交換分區(qū)的大小

409280k cached作為緩存的交換分區(qū)的大小

我們通過 top 命令的第一部分就可以判斷服務(wù)器的健康狀態(tài)。如果 1 分鐘、5 分鐘、15 分鐘的平均負載高于 1,則證明系統(tǒng)壓力較大。如果 CPU 的使用率過高或空閑率過低,則證明系統(tǒng)壓力較大。如果物理內(nèi)存的空閑內(nèi)存過小,則也證明系統(tǒng)壓力較大。

這時,我們就應(yīng)該判斷是什么進程占用了系統(tǒng)資源。如果是不必要的進程,就應(yīng)該結(jié)束這些進程;如果是必需進程,那么我們該増加服務(wù)器資源(比如増加虛擬機內(nèi)存),或者建立集群服務(wù)器。

我們還要解釋一下緩沖(buffer)和緩存(cache)的區(qū)別:

緩存(cache)是在讀取硬盤中的數(shù)據(jù)時,把最常用的數(shù)據(jù)保存在內(nèi)存的緩存區(qū)中,再次讀取該數(shù)據(jù)時,就不去硬盤中讀取了,而在緩存中讀取。

緩沖(buffer)是在向硬盤寫入數(shù)據(jù)時,先把數(shù)據(jù)放入緩沖區(qū),然后再一起向硬盤寫入,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統(tǒng)性能。

簡單來說,緩存(cache)是用來加速數(shù)據(jù)從硬盤中"讀取"的,而緩沖(buffer)是用來加速數(shù)據(jù)"寫入"硬盤的。

再來看 top 命令的第二部分輸出,主要是系統(tǒng)進程信息,各個字段的含義如下:

PID:進程的 ID。

USER:該進程所屬的用戶。

PR:優(yōu)先級,數(shù)值越小優(yōu)先級越高。

NI:優(yōu)先級,數(shù)值越小、優(yōu)先級越高。

VIRT:該進程使用的虛擬內(nèi)存的大小,單位為 KB。

RES:該進程使用的物理內(nèi)存的大小,單位為 KB。

SHR:共享內(nèi)存大小,單位為 KB。

S:進程狀態(tài)。

%CPU:該進程占用 CPU 的百分比。

%MEM:該進程占用內(nèi)存的百分比。

TIME+:該進程共占用的 CPU 時間。

COMMAND:進程的命令名。

這部分和 ps 命令的輸出比較類似,只是如果在終端執(zhí)行 top 命令,則不能看到所有的進程,而只能看到占比靠前的進程。接下來我們舉幾個 top 命令常用的實例。

【例 1】如果只想讓 top 命令查看某個進程,就可以使用 "-p 選項"。命令如下:

[root@localhost ~]# top -p 15273

#只查看 PID為 15273的apache進程

top - 14:28:47 up 1 day, 15:34, 3 users, load average: 0.00,0.00,0.00

Tasks: 1 total, 0 running, 1 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: 625344k total, 574124k used, 51220k free, 67024k buffers

Swap: 524280k total, Ok used, 524280k free, 409344k cached

PID USER PR Nl VIRT RES SHR S %CPU %MEM TIME+ COMMAND

15273 daemon 20 0 45201192 580 S 0.0 0.2 0:00.00 httpd

【例 2】top 命令如果不正確退出,則會持續(xù)運行。在 top 命令的交互界面中按 "q" 鍵會退出 top 命令;也可以按 "?" 或 "h" 鍵得到 top 命令交互界面的幫助信息;還可以按鍵中止某個進程。比如:

[root@localhost ~]# top

top - 14:10:15 up 1 day, 15:15, 3 users, load average: 0.00,0.00, 0.00

Tasks: 97 total, 1 running, 96 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: 625344k total, 574248k used, 51096k free, 66840k buffers

Swap: 524280k total, Ok used, 524280k free, 409324k cached

PID to kill:15273

#按"k"鍵,會提示輸入要殺死進程的PID

PID USER PR Nl VIRT RES SHR S %CPU %MEM TIME+ COMMAND

15273 daemon 20 0 45201192 580 S 0.0 0.2 0:00.00 httpd

..省略部分輸出...

【例 3】輸入要中止進程的 PID,比如要中止 15273 這個 apache 進程,命令如下:

top - 14:11:42 up 1 day, 15:17, 3 users, load average: 0.00,0.00, 0.00

Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 625344k total, 574248k used, 51096k free, 66856k buffers

Swap: 524280k total, 0k used, 524280k free, 409324k cached

Kill PID 15273 with signal [15]:9

#提示輸入信號,信號9代表強制中止

PID USER PR Nl VIRT RES SHR S %CPU %MEM TIME+ COMMAND

15273 daemon 20 0 45201192 580 S 0.0 0.2 0:00.00 httpd

…省略部分輸出…

接下來 top 命令提示我們輸入信號,信號 9 代表強制中止,這時就能夠強制中止 15273 進程了。

【例 4】如果要改變某個進程的優(yōu)先級,就要利用 "r" 交互命令。需要注意的是,我們能夠修改的只有 Nice 的優(yōu)先級,而不能修改 Priority 的優(yōu)先級。具體修改命令如下:

[root@localhost ~]# top -p 18977

top - 14:17:09 up 1 day, 15:22, 3 users, load average: 0.00,0.00, 0.00

Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 625344k total, 574124k used, 51220k free, 66896k buffers

Swap: 524280k total, 0k used, 524280k free, 409324k cached

PID to renice:

#輸入"r"交互命令之后,提示輸入要修改優(yōu)先級的進程的PID

PID USER PR Nl VIRT RES SHR S %CPU %MEM TIME+ COMMAND

18977 root 20 0 11592 3304 2572 S 0.0 0.5 0:04.37 sshd

輸入 "r" 交互命令,會提示輸入需要修改優(yōu)先級的進程的 PID。例如,我們想要修改 18977 這個 sshd 遠程連接進程的優(yōu)先級,就輸入該進程的 PID。命令如下:

Renice PID 18977 to value: 10

#輸入PID后,需要輸入Nice的優(yōu)先級號

#我們把18977進程的優(yōu)先級調(diào)整為10,回車后就能看到

PID USER PR Nl VIRT RES SHR S %CPU %MEM TIME+ COMMAND

18977 root 30 10 11592 3304 2572 R 0.0 0.5 0:04.38 sshd

#18977進程的優(yōu)先級已經(jīng)被修改了


【例 5】如果在操作終端執(zhí)行 top 命令,則并不能看到系統(tǒng)中所有的進程,默認看到的只是 CPU 占比靠前的進程。如果我們想要看到所有的進程,則可以把 top 命令的執(zhí)行結(jié)果重定向到文件中。不過 top 命令是持續(xù)運行的,這時就需要使用 "-b" 和 "-n" 選項了。具體命令如下:

[root@localhost ~]# top -b -n 1 > /root/top.log

#讓top命令只執(zhí)行一次,然后把執(zhí)行結(jié)果保存到top.log文件中,這樣就能看到所有的進程了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡介top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任...
    靜默閱讀 12,236評論 0 0
  • TOP是一個動態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態(tài).如果在前臺執(zhí)行該命令,它將獨占前臺,直到用戶終止該...
    canyoungerz閱讀 1,211評論 0 0
  • top top介紹: top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于...
    b2ef2bbc88ab閱讀 2,620評論 0 0
  • 一、前言 ??top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于Wind...
    騎著烏龜去看海閱讀 2,514評論 2 7
  • 飽脹感并不等于幸?!?幸福也不是聽著無聊的笑話 看著別人的真人秀 吃著不想吃的零嘴 隔著窗簾 你看不到真實的雨滴 ...
    炎炎冬日閱讀 620評論 9 14

友情鏈接更多精彩內(nèi)容