uptime
? ? uptime命令功能比較簡單,主要功能如下所示:
- 查看服務器的開機時長
- 查看CPU負載
基本用法
uptime
用法示例
[root@localhost ~]# uptime
15:33:08 up 10 days, 4:40, 2 users, load average: 1.56, 1.22, 0.92
輸出內容解釋如下所示:
| 顯示內容 | 解釋 |
|---|---|
| 15:33:08 | 系統(tǒng)當前時間 |
| up 10 days, 4:40 | 主機已運行時間,時間越長,說明機器越穩(wěn)定 |
| 2 users | 用戶連接數(shù),是總連接數(shù)而不是用戶數(shù) |
| load average: 1.56, 1.22, 0.92 | 系統(tǒng)平均負載,統(tǒng)計最近1、5、15分鐘的系統(tǒng)平均負載 |
系統(tǒng)平均負載:指在某一段時間間隔內運行隊列中的平均進程數(shù)。根據(jù)實際工程經驗來看,單核負載在 0.7 以下是安全的,如超過則需要進行優(yōu)化了。
除了使用uptime外,我們也可以使用以下方式來獲取系統(tǒng)的平均負載情況。
[root@localhost ~]# cat /proc/loadavg
1.32 1.35 1.15 1/5585 28715
- 前面3個數(shù)字分別表示最近1、5、15分鐘的系統(tǒng)平均負載
- 1/5585:分母表示系統(tǒng)的總進程數(shù),分子表示正在運行的進程數(shù)
- 28715:最近一個啟動運行進程的ID
free
? ? free常用來查看系統(tǒng)的可用內存和已使用內存等信息。
基本用法
free [選項]
常用選項如下所示:
| 選項 | 解釋 |
|---|---|
| -b | 以byte為單位顯示內存使用情況 |
| -k | 以KB為單位顯示內存使用情況 |
| -m | 以MB為單位顯示內存使用情況 |
| -g | 以GB為單位顯示內存使用情況 |
| -t | 額外顯示內存總和 |
| -h | 以較短的數(shù)字(默認為3位數(shù))進行顯示且增加單位,方便查看 |
| -s time | 持續(xù)觀察內存使用情況 |
| -c count | 常與-s一直使用,用來設置采樣樣本數(shù) |
| -l | 詳細顯示高峰和低谷時的內存使用統(tǒng)計情況 |
采用-k/-m/-g/-h顯示的值均采用向下取整的方式顯示,如果需要精確查看,則建議使用-b
用法示例
1、顯示主機內存使用情況
[root@localhost ~]# free -t -m
total used free shared buff/cache available
Mem: 128652 32106 87049 1293 9496 94266
Swap: 4095 0 4095
Total:132748 32106 91145
輸出內解釋如下所示:
total:可用物理內存總量
used:已經使用的內存數(shù),包含buff/cache
free:可使用的內存數(shù),不含buff/cache
share:多個進程共享的內存數(shù)
buff/cache:buff/cache占用量
Swap:交換分區(qū)使用量,虛擬內存
Total:物理內存總數(shù)
vmstat
? ? vmstat是一個Linux監(jiān)控工具,全稱為Virtual Memory Statistics。可用于查看關于進程、內存、I/O、等系統(tǒng)整體運行狀態(tài)。
基本用法
vmstat [選項] [采樣間隔] [采樣樣本數(shù)]
常用選項如下所示:
| 選項 | 解釋 |
|---|---|
| -a | 顯示活動/非活動的內存信息 |
| -f | 顯示自系統(tǒng)啟動以來的系統(tǒng)創(chuàng)建的總任務數(shù) |
| -t | 增加時間戳 |
| -m | 顯示slabinfo信息 |
| -n | 頭部信息僅顯示一次 |
| -s | 以表格形式顯示內存指標及系統(tǒng)事件信息等 |
| -d | 顯示各磁盤的統(tǒng)計信息 |
| -p | 顯示特定分區(qū)的詳細統(tǒng)計信息 |
| delay | 設置兩次更新之間的時間間隔,如果不指定,則默認顯示從開機到現(xiàn)在的平均值 |
| count | 指定采樣的樣本數(shù),如delay指定而count不指定則一直持續(xù)監(jiān)控和輸出 |
用法示例
1、常用用法
vmstat delay count
- delay:采樣時間間隔
- count:采樣的樣本數(shù)

2、查看服務器創(chuàng)建了多少個任務數(shù)
[root@localhost ~]# vmstat -f
51221915 forks
3、顯示特定分區(qū)的統(tǒng)計信息:
[root@localhost ~]# vmstat -p /dev/sdb1
sdb1 reads read sectors writes requested writes
754 35990 81 22102
結果分析
? ? 對于vmstat出來的統(tǒng)計結果,如何判定是否存在問題了?不同的服務器、操作系統(tǒng)、應用場景等均不一樣,也無法給出統(tǒng)一的判斷標準,需要大家根據(jù)實際情況進行綜合判斷。以下是一些實際應用中的經驗,僅供參考:
- 1、如果cache的值比較大,則說明系統(tǒng)緩存了比較多的磁盤數(shù)據(jù),有利于磁盤I/O性能的提升,此時,bi會相對較小,因為很多讀寫磁盤的操作都由cache來承擔了。
- 2、si和so則代表讀寫SWAP的數(shù)量,這兩個值如果長期大于0,則表示系統(tǒng)需要經常讀寫交換分區(qū),這樣會消耗CPU資源和磁盤I/O性能。如能確定物理內存存在瓶頸,則需要進行擴容或遷移了。
- 3、如free的值很低,基于接近于0,也不一定就是系統(tǒng)內存已經耗盡,還需要結合buffer和cache的使用量,如果buffer和cache占用了很多內存資源,則代表沒有問題,說明系統(tǒng)把空閑的內存都用于緩存,反而是提升了I/O性能,當系統(tǒng)需要內存時,buffer和cache可以隨時被回收回來。
- 4、如果bi和bo值很大,則說明系統(tǒng)正在進行大量的磁盤讀寫操作。如果是用戶正在進行的操作,則沒有問題,否則需要進行排查哪個設備或分區(qū)在進行大量讀寫操作。
- 5、如果us的值經常大于50%,則說明用戶進程占用的CPU時間比較多,需要對占用較多的程序進行排查和優(yōu)化了。
- 6、如果sy值比較高,需要排查系統(tǒng)是否存在問題。
- 7、如果wa值比較高,則說明CPU總是在等待I/O操作,說明磁盤已經成為瓶頸,需要排查磁盤是否存在問題或優(yōu)化程序的讀寫操作
- 8、如果r值總是超過CPU核數(shù),則說明CPU可能成為瓶頸,可考核升級CPU等
mpstat
? ? mpstat全稱Multiprocessor statistics,也是一個監(jiān)控工具,主要對象是CPU。
基本用法
mpstat [選項] [采樣間隔] [采樣樣本數(shù)]
常用選項如下所示:
| 選項 | 解釋 |
|---|---|
| -I | 顯示中斷統(tǒng)計信息 |
| -P | 顯示指定CPU編號的統(tǒng)計信息,0為第一個CPU |
| -u | 顯示CPU的使用情況 |
| -A | 等同于-u -I ALL -P ALL |
與-I一起使用的參數(shù)如下所示
- SUM:顯示所有CPU中斷次數(shù)之和
- CPU:顯示每個CPU中斷次數(shù)
- ALL:將SUM和CPU的內容一起顯示
與-P一起使用的參數(shù)如下所示
- ON:僅統(tǒng)計在線的CPU使用情況
- ALL:統(tǒng)計所有CPU的使用情況
CPU常用指標
? ? 該指標一般是使用選項-u出來的統(tǒng)計結果,如下所示:
| 指標 | 解釋 |
|---|---|
| CPU | CPU編號 |
| %usr | 用戶進程所使用的CPU占比 |
| %nice | 對進程進行降級時的CPU占比 |
| %sys | 內核進行使用的CPU占比 |
| %iowait | 空閑態(tài)中等待I/O請求所使用的CPU占比 |
| %irq | 處理系統(tǒng)中斷所使用的CPU占比 |
| %soft | 軟件中斷所使用的CPU占比 |
| %steal | 虛擬管理程序所使用的CPU占比 |
| %guest | 運行虛擬處理器所使用的CPU占比 |
| %gnice | 運行降級虛擬程序所使用的CPU占比 |
| %idle | CPU空閑態(tài)的CPU占比 |
用法示例
1、查看所有CPU運行狀態(tài)

2、查看指定CPU編號的運行狀態(tài)

3、查看CPU中斷情況
因為CPU的運算速度比外部硬件要快很多。以硬盤為例,如果是簡單的順序執(zhí)行,則CPU需要等待很長
時間,不停詢問硬盤是否讀取完成,而這樣會浪費很多CPU時間。為此人們提出一種中斷機制,使得讀取硬
盤這樣的操作交給其他設備來完成,而CPU則掛起當前進程,將控制權轉讓給其他來處理的進程,當其他設
備處理完成后通知CPU,系統(tǒng)將當前進程標識為活動進行,從而繼續(xù)執(zhí)行,處理硬盤的讀取操作。

top
? ? top是Linux中一個常用的性能監(jiān)控工具并能周期性地進行更新,我們因此也可以快速了解服務器的運行狀態(tài)。
基本用法
top [選項]
常用的選項如下所示:
| 選項 | 解釋 | |
|---|---|---|
| -b | 以批處理模式進行操作 | |
| -c | 顯示完整的命令信息 | |
| -d | 更新時間間隔 | |
| -n number | 指定循環(huán)顯示的次數(shù) | |
| -u number/name | 顯示指定用戶ID/用戶名的進程 | |
| -p pid | 顯示指定PID的進程 | |
| -s | 安全模式 | |
| -S | 累積模式 |
交互模式
? ? 交換械是指在top顯示相關信息時,在不影響顯示信息的同時進行的其他操作等,詳細如下所示:
| 快捷鍵 | 說明 |
|---|---|
| f | 添加或刪除進程信息項 |
| k | 終止進程,需要輸入PID號 |
| r | 更改進程優(yōu)先級 |
| S | 切換到累積模式 |
| s或d | 更改刷新時間 |
| m | 切換顯示內存信息 |
| t | 切換顯示進程和CPU狀態(tài)信息 |
| c | 切換顯示命令名稱和完整命令行 |
| P | 根據(jù)CPU使用率大小進行排序 |
| T | 根據(jù)時間/累計時間進行排序 |
| W | 將當前設置保存到~/.toprc文件中 |
| q | 退出top進程 |
| b | 將當前進程進行高亮顯示 |
| l | 是否顯示系統(tǒng)負載信息和啟動時間 |
| 1(數(shù)字1) | 顯示每個CPU核心單獨的性能數(shù)據(jù) |
用法示例
1、第一個示例:

示例詳解
-
系統(tǒng)級信息
05top示例詳細講解-1.jpg 進程指標信息
| 指標 | 說明 | 參考值 |
|---|---|---|
| PID | 進程ID | |
| PRID | 父進程ID | |
| USER | 進程所屬用戶,啟用進程的用戶名 | |
| PR | Priority縮寫,進程優(yōu)先級 | |
| NI | Nice縮寫,用于調節(jié)優(yōu)先級,與PR有關,越小越早被執(zhí)行 | -20~20 正數(shù)優(yōu)先級降低,負數(shù)優(yōu)先級提升 |
| VIRT | 進程虛擬內存使用量 | |
| RES | 進程使用且未被交換出的物理內存使用量 | |
| SHR | 共享內存使用量 | |
| S | 進程狀態(tài) | R:運行 S:睡眠 D:不可中斷的睡眠狀態(tài) T:跟蹤、停止 僵尸 |
| %CPU | CPU使用率 | |
| %MEM | 內存使用率 | |
| TIME+ | 進程的CPU使用時間累積和 | 單位為1/100秒 |
| TIME | 進程占用的CPU時間累積和 | 單位為秒 |
| RUSER | 進程的實際用戶名,即登錄到Shell所用用戶名 | |
| UID | 進程所屬用戶的ID | |
| GROUP | 進程所屬的組名 | |
| TTY | 啟動進程的終端名稱 | |
| P | 進程最近一次所使用的CPU編號 | |
| SWAP | 進程使用且被交換出來的虛擬內存使用量 | |
| CODE | 進程對應的可執(zhí)行代碼所占用的物理內存量 | |
| DATA | 進程對應的數(shù)據(jù)部分(數(shù)據(jù)段、棧等)所占用的物理內存量 | |
| nFLT | 頁面錯誤次數(shù) | |
| nDRT | 最后一次寫入到目前為止被修改過的頁面數(shù) | |
| WCHAN | 如果進程處理睡眠狀態(tài),則顯示睡眠狀態(tài)中系統(tǒng)調用名 | |
| Flags | 進程標志 | |
| COMMAND | 進程所對應的命令名 |
iostat
? ? iostat命令主要用來CPU的統(tǒng)計信息和每個設備、硬盤的IO統(tǒng)計信息
基本用法
iostat [選項] [采樣間隔] [采樣樣本數(shù)]
常用的選項如下所示:
| 選項 | 解釋 |
|---|---|
| -c | 僅顯示CPU的統(tǒng)計信息,即單獨輸出CPU的平均統(tǒng)計信息 |
| -d | 僅顯示設備的統(tǒng)計信息 |
| -h | 將各設備的統(tǒng)計信息以易于查看的方式進行顯示 |
| -k | 以kb/s顯示統(tǒng)計信息 |
| -m | 以mb/s顯示統(tǒng)計信息 |
| -t | 增加顯示時間戳 |
| -x | 顯示額外信息 |
| -y | 忽略自系統(tǒng)啟動以來的第一行信息 |
用法示例
1、iostat示例

2、查看硬盤的IO信息

各指標詳細解釋如下所示:
| 指標 | 說明 |
|---|---|
| tps | 每秒進程的I/O讀寫請求總數(shù) |
| MB_read/s | 每秒讀取的字節(jié)數(shù),單位為MB/s |
| MB_wrtn/s | 每秒寫入的字節(jié)數(shù),單位為MB/s |
| MB_read | 讀取的字節(jié)總數(shù) ,單位為MB |
| MB_wrtn | 寫入的字節(jié)總數(shù) ,單位為MB |
看到第一組第一行的數(shù)字非常大,是否就可以斷定I/O存在問題了? 在iostat輸出的第一組第一行數(shù)據(jù),
表示是自Linux系統(tǒng)啟動剛才本命令執(zhí)行這段期間的統(tǒng)計結果,而后面的幾組數(shù)據(jù)才真正表示了在iostat
采樣周期的統(tǒng)計結果,而如果要排除第一組的數(shù)據(jù)可以使用選項 -y
3、顯示額外的統(tǒng)計信息

各指標詳細解釋如下所示:
| 指標 | 說明 |
|---|---|
| rrqm/s | 每秒對該設備的讀取請求總次數(shù) |
| wrqm/s | 每秒對該設備的寫入請求總次數(shù) |
| r/s | 每秒完成讀取的I/O次數(shù) |
| w/s | 每秒完成寫入的I/O次數(shù) |
| rMB/s | 每秒實際讀取的大小,單位為MB |
| wMB/s | 每秒實際寫入的大小,單位為MB |
| avgrq-sz | 平均每次I/O操作的數(shù)據(jù)大小 |
| avgqu-sz | 平均等待處理I/O操作的隊列長度 |
| await | 平均每次I/O請求等待時間(含等待時間和處理時間),一般應低于5ms |
| r_await | 每次讀取I/O請求等待時間 |
| w_await | 每次寫入I/O請求等待時間 |
| svctm | 平均每次I/O操作的服務時間 |
| %util | 周期內用于I/O操作的時間比率,即I/O隊列非空的時間比率,即(r/s+w/s )*(svctm/1000) |
需要關注的參數(shù)如下所示:
- %util:表示磁盤的忙碌情況,較大則代表I/O請求太多,硬盤可能存在瓶頸,一般不超過80%
- await大于svctm:差值越小,則說明隊列時間越短,反之差值越大,則隊列時間越長,系統(tǒng)可能存在問題
- svctm接近await,則說明I/O幾乎沒有等待時間
- await遠大于svctm,則說明I/O隊列太長,則響應時間會變長
4、顯示CPU統(tǒng)計信息

各指標詳細解釋如下所示:
| 指標 | 說明 |
|---|---|
| %user | 顯示CPU在用戶級(應用程序)執(zhí)行時的時間占比 |
| %nice | 顯示CPU在用戶級(應用程序)使用NICE權限執(zhí)行時的時間占比 |
| %system | 顯示CPU在系統(tǒng)級(內核)執(zhí)行時的時間占比 |
| %iowait | 顯示CPU在空閑狀態(tài)期間未完成的磁盤I/O時間占比 |
| %steal | 顯示hypervisor服務另一個虛擬處理器時,虛擬CPU等待實際CPU的時間占比 |
| %idle | 顯示CPU在空閑狀態(tài)期間系統(tǒng)未完成的磁盤I/O時間占比 |
- 如果steal值比較高的話,需要擴容虛擬機,這是因為服務器上的另一個虛擬機可能擁有更大更多的CPU時間片而占用了你的虛擬機的CPU時間
- 如果iowait值比較高,則可能硬盤存在I/O瓶頸
- 如果idle值比較高,則表示CPU長期處于空閑狀態(tài)
- 如果idle值比較高但系統(tǒng)響應慢時,則有可能是CPU在等待內存分配,可考慮擴容內存容量
- 如果idle值如果長期低于10%,則CPU處理能力是瓶頸
