掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站制作、成都網(wǎng)站設計、金州網(wǎng)絡推廣、小程序開發(fā)、金州網(wǎng)絡營銷、金州企業(yè)策劃、金州品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供金州建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
為此,linux 提供了
top 命令。top 命令可以動態(tài)地持續(xù)監(jiān)聽進程地運行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據(jù)需要,人性化地定制自己的輸出,進而更清楚地了進程的運行狀態(tài)。
top 命令的基本格式如下:
[root@localhost ~]#top [選項]
選項:
在 top 命令的顯示窗口中,還可以使用如下按鍵,進行一下交互操作:
我們看看 top 命令的執(zhí)行結果,如下:
[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 NI VIRT RES SHR S %CPU %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 秒刷新一次。命令的輸出主要分為兩部分:
我們先來說明第一部分的作用。
| 內(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)驗來進行判斷的,一般認為不應該超過服務器 CPU 的核數(shù)) |
| 內(nèi) 容 | 說 明 |
|---|---|
| Tasks: 95 total | 系統(tǒng)中的進程總數(shù) |
| 1 running | 正在運行的進程數(shù) |
| 94 sleeping | 睡眠的進程數(shù) |
| 0 stopped | 正在停止的進程數(shù) |
| 0 zombie | 僵尸進程數(shù)。如果不是 0,則需要手工檢查僵尸進程 |
| 內(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 | 硬中斷請求服務占用的 CPU 百分比 |
| 0.1%si | 軟中斷請求服務占用的 CPU 百分比 |
| 0.0%st | st(steal time)意為虛擬時間百分比,就是當有虛擬機時,虛擬 CPU 等待實際 CPU 的時間百分比 |
| 內(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ù)量 |
| 內(nèi) 容 | 說 明 |
|---|---|
| Swap: 524280k total | 交換分區(qū)(虛擬內(nèi)存)的總大小 |
| Ok used | 已經(jīng)使用的交換分區(qū)的大小 |
| 524280k free | 空閑交換分區(qū)的大小 |
| 409280k cached | 作為緩存的交換分區(qū)的大小 |
我們通過 top 命令的第一部分就可以判斷服務器的健康狀態(tài)。如果 1 分鐘、5 分鐘、15 分鐘的平均負載高于 1,則證明系統(tǒng)壓力較大。如果 CPU 的使用率過高或空閑率過低,則證明系統(tǒng)壓力較大。如果物理內(nèi)存的空閑內(nèi)存過小,則也證明系統(tǒng)壓力較大。
這時,我們就應該判斷是什么進程占用了系統(tǒng)資源。如果是不必要的進程,就應該結束這些進程;如果是必需進程,那么我們該増加服務器資源(比如増加虛擬機內(nèi)存),或者建立集群服務器。
我們還要解釋一下
緩沖(buffer)和
緩存(cache)的區(qū)別:
簡單來說,緩存(cache)是用來加速數(shù)據(jù)從硬盤中"讀取"的,而緩沖(buffer)是用來加速數(shù)據(jù)"寫入"硬盤的。
再來看 top 命令的第二部分輸出,主要是系統(tǒng)進程信息,各個字段的含義如下:
這部分和 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 NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 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 NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 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 NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 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 NI 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 NI 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í)行結果重定向到文件中。不過 top 命令是持續(xù)運行的,這時就需要使用 "-b" 和 "-n" 選項了。具體命令如下:
[root@localhost ~]# top -b -n 1 > /root/top.log
#讓top命令只執(zhí)行一次,然后把執(zhí)行結果保存到top.log文件中,這樣就能看到所有的進程了

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流