天天看點

Linux系統監控指令整理彙總-掌握CPU,記憶體,磁盤IO等找出性能瓶頸

作者:壹萬小時探索

如果你已經知曉如果使用某一個監控指令,可以直接在Linux系統監控指令速查手冊中快速查找,表格右上角有搜尋框,你可以輸入快速查找自己想的功能或者指令。如對某一個指令不熟悉,你可以使用Chrome浏覽器的網頁檢視功能快速鍵:ctrl+f,輸入指令直接跳到詳情部分。

零、Linux系統監控指令速查手冊

指令 功能作用 用法舉例
free 檢視記憶體使用情況,包括實體記憶體和虛拟記憶體 free -h或free -m
vmstat 對系統的整體情況進行統計,包括核心程序、虛拟記憶體、磁盤、陷阱和 CPU 活動的統計資訊 vmstat 2 100
top 實時顯示系統中各個程序的資源占用狀況及總體狀況 top
mpstat 實時系統監控工具,它會報告與CPU相關的統計資訊 mpstat
sar 收集、報告和儲存CPU、記憶體、輸入輸出端口使用情況 sar -n DEV 3 100
netstat 檢驗本機各端口的網絡連接配接情況,用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料 netstat -a
tcpdump 用于捕捉或者過濾網絡上指定接口上接收或者傳輸的TCP/IP包 tcpdump -i eth0 -c 3
IPTraf 用來生成包括TCP資訊、UDP計數、ICMP和OSPF資訊、以太網負載資訊、節點狀态資訊、IP校驗和錯誤等等統計資料 iptraf
df 檢查linux的檔案系統的磁盤空間占用情況 df -h
iostat 收集顯示系統儲存設備輸入和輸出狀态統計 iostat -x -k 2 100
iotop 用來監視磁盤I/O使用狀況的top類工具 iotop
lsof 用于以清單的形式顯示所有打開的檔案和程序 lsof
atop 顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,并且在高負載的情況下進行了彩色标注 atop
htop 它和top指令十分相似,進階的互動式的實時linux程序監控工具 htop
ps 最基本同時也是非常強大的程序檢視指令 ps aux
glances 監視 CPU,平均負載,記憶體,網絡流量,磁盤 I/O,其他處理器 和 檔案系統 空間的利用情況 glances
dstat 全能系統資訊統計工具,可用于替換vmstat、iostat、netstat、nfsstat和ifstat這些指令的工具 dstat
uptime 用于檢視伺服器運作了多長時間以及有多少個使用者登入,快速獲知伺服器的負荷情況 uptime
dmesg 主要用來顯示核心資訊。使用dmesg可以有效診斷機器硬體故障或者新增硬體出現的問題。 dmesg
mpstat 用于報告多路CPU主機的每顆CPU活動情況,以及整個主機的CPU情況。 mpstat 2 3
nmon 監控CPU、記憶體、I/O、檔案系統及網絡資源。對于記憶體的使用,它可以實時的顯示 總/剩餘記憶體、交換空間等資訊。 nmon
mytop 用于監控 mysql 的線程和性能。它能讓你實時檢視資料庫以及正在處理哪些查詢。 mytop
iftop 用來監控網卡的實時流量(可以指定網段)、反向解析IP、顯示端口資訊等 iftop
jnettop 以相同的方式來監測網絡流量但比 iftop 更形象。它還支援自定義的文本輸出,并能以友好的互動方式來深度分析日志。 jnettop
ngrep 網絡層的 grep。它使用 pcap ,允許通過指定擴充正規表達式或十六進制表達式來比對資料包。 ngrep
nmap 可以掃描你伺服器開放的端口并且可以檢測正在使用哪個作業系統 nmap
du 檢視Linux系統中某目錄的大小 du -sh 目錄名
fdisk 檢視硬碟及分區資訊 fdisk -l

一、記憶體監控

1.1 free指令

free可以用來快速檢視VPS主機的記憶體使用情況,包括了實體記憶體和虛拟記憶體。後面可以加上參數:-h和-m,否則預設會以kb為機關顯示。

相關參數說明:

total:實體記憶體大小,就是機器實際的記憶體

used:已使用的記憶體大小,這個值包括了 cached 和 應用程式實際使用的記憶體

free:未被使用的記憶體大小

shared:共享記憶體大小,是程序間通信的一種方式

buffers:被緩沖區占用的記憶體大小

cached:被緩存占用的記憶體大小

1.2 vmstat指令

vmstat(Virtual Meomory Statistics,虛拟記憶體統計)是對系統的整體情況進行統計,包括核心程序、虛拟記憶體、磁盤、陷阱和 CPU 活動的統計資訊。指令格式:vmstat 2 100,其中2表示重新整理間隔,100表示輸出次數。

相關參數說明:

1 procs

r清單示運作和等待CPU時間片的程序數,這個值如果長期大于系統CPU個數,就說明CPU資源不足,可以考慮增加CPU;b清單示在等待資源的程序數,比如正在等待I/O或者記憶體交換等。

2 memory

swpd清單示切換到記憶體交換區的記憶體數量(以KB為機關)。如果swpd的值不為0或者比較大,而且si、so的值長期為0,那麼這種情況一般不用擔心,不會影響系統性能;free清單示目前空閑的實體記憶體數量(以KB為機關);buff清單示buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖;cache清單示page cached的記憶體數量,一般作檔案系統的cached,頻繁通路的檔案都會被cached。如果cached值較大,就說明cached檔案數較多。如果此時IO中的bi比較小,就說明檔案系統效率比較好。

3 swap

si清單示由磁盤調入記憶體,也就是記憶體進入記憶體交換區的數量;so清單示由記憶體調入磁盤,也就是記憶體交換區進入記憶體的數量一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統記憶體不足,需要考慮是否增加系統記憶體。

4 IO

bi清單示從塊裝置讀入的資料總量(即讀磁盤,機關KB/秒)bo清單示寫入到塊裝置的資料總量(即寫磁盤,機關KB/秒)

這裡設定的bi+bo參考值為1000,如果超過1000,而且wa值比較大,則表示系統磁盤IO性能瓶頸。

5 system

in清單示在某一時間間隔中觀察到的每秒裝置中斷數;cs清單示每秒産生的上下文切換次數。

上面這兩個值越大,會看到核心消耗的CPU時間就越多。

6 CPU

us列顯示了使用者程序消耗CPU的時間百分比。us的值比較高時,說明使用者程序消耗的CPU時間多,如果長期大于50%,需要考慮優化程式啥的。sy列顯示了核心程序消耗CPU的時間百分比。sy的值比較高時,說明核心消耗的CPU時間多;如果us+sy超過80%,就說明CPU的資源存在不足。id列顯示了CPU處在空閑狀态的時間百分比;wa清單示IO等待所占的CPU時間百分比。wa值越高,說明IO等待越嚴重。如果wa值超過20%,說明IO等待嚴重。st列一般不關注,虛拟機占用的時間百分比。

二、CPU監控

2.1 TOP指令

top指令是Linux下常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況及總體狀況。

相關的參數說明:

第一行:

14:36:09: 這是wzfou.com測試時系統時間up xxx days, 11:13:系統運作時間,系統已經運作了xx天11小時13分鐘了。2 users:目前登入使用者數load average:系統負載,即任務隊列的平均長度。三個數值分别為最近1分鐘、最近5分鐘、最近15分鐘的平均負載 —— 超過N(CPU核數)說明系統滿負荷運作。也可以通過$w或$uptime指令檢視load average。

第二行:

顯示程序總數、正在運作的程序數、休眠的程序數、停止的程序數、僵屍程序數

第三行:

%us:使用者程序消耗的CPU百分比%sy:核心程序消耗的CPU百分比%ni:改變過優先級的程序占用CPU的百分比%id:空閑CPU的百分比%wa:IO等待消耗的CPU百分比

2.2 mpstat指令

mpstat(Multiprocessor Statistics,多處理器統計)是實時系統監控工具,它會報告與CPU相關的統計資訊,這些資訊存放在/proc/stat檔案中。格式:mpstat -P ALL 2 # ALL表示顯示所有CPUs,也可以指定某個CPU;2表示重新整理間隔。

指令效果如下:

三、網絡監控

3.1 sar指令

SAR是一個在Unix和Linux作業系統中用來收集、報告和儲存CPU、記憶體、輸入輸出端口使用情況的指令。SAR指令可以動态産生報告,也可以把報告儲存在日志檔案中。指令格式:sar -n DEV 3 100。

相關參數說明如下:

IFACE:網絡裝置的名稱

rxpck/s:每秒鐘接收到的包數目

txpck/s:每秒鐘發送出去的包數目

rxkB/s:每秒鐘接收到的位元組數

txkB/s:每秒鐘發送出去的位元組數

3.2 netstat

netstat指令一般用于檢驗本機各端口的網絡連接配接情況,用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料。

選取部分選項說明如下:

-a, --all, --listening     顯示所有連接配接中的Socket。
-n, --numeric              以數字形式顯示位址和端口号。
-t, -–tcp                  顯示TCP傳輸協定的連線狀況。
-u, -–udp                  顯示UDP傳輸協定的連線狀況。
-p, --programs             顯示正在使用socket的程式名/程序ID
-l, --listening            顯示監控中的伺服器的Socket。
-o, --timers               顯示計時器。
-s, --statistics           顯示每個網絡協定的統計資訊(比如SNMP)
-i, --interfaces           顯示網絡界面資訊表單(網卡清單)
-r, --route                顯示路由表           

常用的幾種:

$ netstat -aup        # 輸出所有UDP連接配接狀況
$ netstat -atp        # 輸出所有TCP連接配接狀況
$ netstat -s          # 顯示各個協定的網絡統計資訊
$ netstat -i          # 顯示網卡清單
$ netstat -r          # 顯示路由表資訊           

netstat在防禦攻擊時非常有用。以wzfou.com平常用到的示例如下:

netstat -n -p|grep SYN_REC | wc -l           

上面指令可以查找出目前伺服器有多少個活動的 SYNC_REC 連接配接。正常來說這個值很小,最好小于5。 當有Dos攻擊或者郵件炸彈的時候,這個值相當的高。另外這個值和系統有很大關系,有的伺服器值就很高,也是正常現象。

netstat -n -p | grep SYN_REC | sort -u           

上面指令可以列出所有連接配接過的IP位址。

netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'           

上面指令可以列出所有發送SYN_REC連接配接節點的IP位址。

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n           

上面指令可以使用netstat指令計算每個主機連接配接到本機的連接配接數。

netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n           

上面指令可以列出所有連接配接到本機的UDP或者TCP連接配接的IP數量。

netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr           

上面指令可以檢查 ESTABLISHED 連接配接并且列出每個IP位址的連接配接數量。

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1           

上面指令可以列出所有連接配接到本機80端口的IP位址和其連接配接數。80端口一般是用來處理HTTP網頁請求。

防禦CC攻擊還可以用以下方法檢測:

檢視所有80端口的連接配接數

netstat -nat|grep -i “80”|wc -l

對連接配接的IP按連接配接數量進行排序

netstat -anp | grep ‘tcp\|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nnetstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nnetstat -ntu | awk ‘{print $5}’ | egrep -o “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” | sort | uniq -c | sort -nr

檢視TCP連接配接狀态

netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rnnetstat -n | awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rnnetstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c

檢視80端口連接配接數最多的20個IP

cat /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100tail -n 10000 /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100cat /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20

用tcpdump嗅探80端口的通路看看誰最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20

查找較多time_wait連接配接

netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20

查找較多的SYN連接配接

netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

linux下實用iptables封ip段的一些常見指令:

封單個IP的指令是:

iptables -I INPUT -s 211.1.0.0 -j DROP

封IP段的指令是:

iptables -I INPUT -s 211.1.0.0/16 -j DROPiptables -I INPUT -s 211.2.0.0/16 -j DROPiptables -I INPUT -s 211.3.0.0/16 -j DROP

封整個段的指令是:

iptables -I INPUT -s 211.0.0.0/8 -j DROP

封幾個段的指令是:

iptables -I INPUT -s 61.37.80.0/24 -j DROPiptables -I INPUT -s 61.37.81.0/24 -j DROP

3.3 tcpdump指令

Tcpdump是最廣泛使用的網絡包分析器或者包監控程式之一,它用于捕捉或者過濾網絡上指定接口上接收或者傳輸的TCP/IP包。格式:tcpdump -i eth0 -c 3

該指令不是系統自帶的,可能需要自己搬運安裝。

3.4 IPTraf

iptraf是一個基于ncurses的IP區域網路監控器,用來生成包括TCP資訊、UDP計數、ICMP和OSPF資訊、以太網負載資訊、節點狀态資訊、IP校驗和錯誤等等統計資料。簡單的和詳細的接口統計資料,包括IP、TCP、UDP、ICMP、非IP以及其他的IP包計數、IP校驗和錯誤,接口活動、包大小計數。

指令格式:iptraf。

四、磁盤監控

4.1 df指令

df指令的功能是用來檢查linux的檔案系統的磁盤空間占用情況。如果沒有檔案名被指定,則顯示目前所有被挂載的檔案系統,預設以 KB 為機關。常用格式:$ df -h。

相關參數說明如下:

-a 全部檔案系統清單

-h 以友善閱讀的方式顯示

-i 顯示inode資訊

-T 顯示檔案系統類型

-l 隻顯示本地檔案系統

-k 以KB為機關

-m 以MB為機關

4.2 iostat指令

iostat是一個用于收集顯示系統儲存設備輸入和輸出狀态統計的簡單工具。這個工具常常用來追蹤儲存設備的性能問題,其中儲存設備包括裝置、本地磁盤,以及諸如使用NFS等的遠端磁盤。常用格式:

$ iostat -x -k 2 100        # 2表示重新整理間隔,100表示重新整理次數           

iostat主要是用來監控磁盤I/O,首先輸出了CPUs的平均資料(avg-cpu),我們可以看%iowait這一項,除此之外iostat還提供了一些更詳細的I/O狀态資料,比如:

r/s: 每秒完成的讀 I/O 裝置次數。

w/s: 每秒完成的寫 I/O 裝置次數。

rkB/s: 每秒讀K位元組數.是 rsect/s 的一半,因為每扇區大小為512位元組。

wkB/s: 每秒寫K位元組數.是 wsect/s 的一半。

avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。

avgqu-sz: 平均I/O隊列長度。

await: 平均每次裝置I/O操作的等待時間 (毫秒)。

svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。

%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。

4.3 iotop指令

iotop指令是一個用來監視磁盤I/O使用狀況的top類工具。iotop具有與top相似的UI,其中包括PID、使用者、I/O、程序等相關資訊。Linux下的IO統計工具如iostat,nmon等大多數是隻能統計到per裝置的讀寫情況,如果你想知道每個程序是如何使用IO的就比較麻煩,使用iotop指令可以很友善的檢視。

iotop的常用參數如下:

–version 檢視程式版本号

-h, –help 檢視幫助資訊

-o, –only 隻檢視有IO操作的程序

-b, –batch 非互動模式

-n, –iter= 設定疊代次數

-d, –delay 重新整理頻率,預設是1秒

-p, –pid 檢視指定的程序号的IO,預設是所有程序

-u, –user 檢視指定使用者程序的IO,預設是所有使用者

-P, –processes 隻看程序,不看線程

-a, –accumulated 看累計IO,而不是實時IO

-k, –kilobytes 以KB為機關檢視IO,而不是以最友好的機關顯示

-t, –time 每行添加一個時間戳,預設便開啟–batch

-q, –quit 不顯示頭部資訊

4.4 lsof指令

列出打開的檔案:lsof。它常用于以清單的形式顯示所有打開的檔案和程序。打開的檔案包括磁盤檔案、網絡套接字、管道、裝置和程序。使用這條指令的主要情形之一就是在無法挂載磁盤和顯示正在使用或者打開某個檔案的錯誤資訊的時候。使用這條指令,你可以很容易地看到正在使用哪個檔案。

五、程序監控

5.1 aTOP指令

atop指令是一個終端環境的監控指令。它顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,并且在高負載的情況下進行了彩色标注。atop可以看成是top的加強版,如果執行atop指令顯示不存在你需要yum或者apt-get 來安裝它。

相關的參數說明:

ATOP列:該列顯示了主機名、資訊采樣日期和時間點

PRC列:該列顯示程序整體運作情況

sys、usr字段分别訓示程序在核心态和使用者态的運作時間#proc字段訓示程序總數#zombie字段訓示僵死程序的數量#exit字段訓示atop采樣周期期間退出的程序數量

CPU列:該列顯示CPU整體(即多核CPU作為一個整體CPU資源)的使用情況,我們知道CPU可被用于執行程序、進行中斷,也可處于空閑狀态(空閑狀态分兩種,一種是活動程序等待磁盤IO導緻CPU空閑,另一種是完全空閑)

sys、usr字段訓示CPU被用于處理程序時,程序在核心态、使用者态所占CPU的時間比例irq字段訓示CPU被用于進行中斷的時間比例idle字段訓示CPU處在完全空閑狀态的時間比例wait字段訓示CPU處在“程序等待磁盤IO導緻CPU空閑”狀态的時間比例

CPU列各個字段訓示值相加結果為N00%,其中N為cpu核數。

cpu列:該列顯示某一核cpu的使用情況,各字段含義可參照CPU列,各字段值相加結果為100%

CPL列:該列顯示CPU負載情況

avg1、avg5和avg15字段:過去1分鐘、5分鐘和15分鐘内運作隊列中的平均程序數量csw字段訓示上下文交換次數intr字段訓示中斷發生次數

MEM列:該列訓示記憶體的使用情況

tot字段訓示實體記憶體總量free字段訓示空閑記憶體的大小cache字段訓示用于頁緩存的記憶體大小buff字段訓示用于檔案緩存的記憶體大小slab字段訓示系統核心占用的記憶體大小

SWP列:該列訓示交換空間的使用情況

tot字段訓示交換區總量free字段訓示空閑交換空間大小

PAG列:該列訓示虛拟記憶體分頁情況

swin、swout字段:換入和換出記憶體頁數

DSK列:該列訓示磁盤使用情況,每一個磁盤裝置對應一列,如果有sdb裝置,那麼增多一列DSK資訊

sda字段:磁盤裝置辨別busy字段:磁盤忙時比例read、write字段:讀、寫請求數量

NET列:多列NET展示了網絡狀況,包括傳輸層(TCP和UDP)、IP層以及各活動的網口資訊

XXXi 字段訓示各層或活動網口收包數目XXXo 字段訓示各層或活動網口發包數目

5.2 htop指令

htop 是一個非常進階的互動式的實時linux程序監控工具。 它和top指令十分相似,但是它具有更豐富的特性,例如使用者可以友好地管理程序,快捷鍵,垂直和水準方式顯示程序等等。

5.3 ps指令

ps(Process Status,程序狀态)指令是最基本同時也是非常強大的程序檢視指令,最常用的指令就是ps aux——顯示目前所有程序

$ ps aux | grep root       # 輸出root使用者的所有程序
$ ps -p <pid> -L            # 顯示程序<pid>的所有線程
$ ps -e -o pid,uname,pcpu,pmem,comm  # 定制顯示的列
$ ps -o lstart <pid>        # 顯示程序的啟動時間           

ps指令的輸出可以按任意某一列進行排序,通過使用内部排序鍵(列的别名),例如:

$ ps aux --sort=+rss         # 按記憶體升序排列
$ ps aux --sort=-rss        # 按記憶體降序排列
$ ps aux --sort=+%cpu        # 按cpu升序排列
$ ps aux --sort=-%cpu       # 按cpu降序排列           

六、系統監控全能工具

上面分享的都是單個檢視Linux系統磁盤、CPU、記憶體等名額的工具,如果我們想要迅速找出來VPS主機的性能瓶頸所在,我們可以采用以下幾個“全能”工具:

6.1 glances工具

Glances 是一個用來監視 GNU/Linux 和 FreeBSD 作業系統的 GPL 授權的免費軟體,通過 Glances,我們可以監視 CPU,平均負載,記憶體,網絡流量,磁盤 I/O,其他處理器 和 檔案系統 空間的利用情況。wzfou.com就是用這個來監控的。文法:glances

Glances 會用一下幾種顔色來代表狀态:綠色:OK(一切正常) 藍色:CAREFUL(需要注意) 紫色:WARNING(警告) 紅色:CRITICAL(嚴重)。閥值可以在配置檔案中設定,一般閥值被預設設定為(careful=50、warning=70、critical=90)。

Glances 還提供了更多的可在其運作時開關輸出資訊選項的快捷鍵,例如:

a – 對程序自動排序

c – 按 CPU 百分比對程序排序

m – 按記憶體百分比對程序排序

p – 按程序名字母順序對程序排序

i – 按讀寫頻率(I/O)對程序排序

d – 顯示/隐藏磁盤 I/O 統計資訊

f – 顯示/隐藏檔案系統統計資訊

n – 顯示/隐藏網絡接口統計資訊

s – 顯示/隐藏傳感器統計資訊

y – 顯示/隐藏硬碟溫度統計資訊

l – 顯示/隐藏日志(log)

b – 切換網絡 I/O 機關(Bytes/bits)

w – 删除警告日志

x – 删除警告和嚴重日志

1 – 切換全局 CPU 使用情況和每個 CPU 的使用情況

h – 顯示/隐藏這個幫助畫面

t – 以組合形式浏覽網絡 I/O

u – 以累計形式浏覽網絡 I/O

q – 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)

6.2 dstat工具

dstat指令是一個用來替換vmstat、iostat、netstat、nfsstat和ifstat這些指令的工具,是一個全能系統資訊統計工具。與sysstat相比,dstat擁有一個彩色的界面,在手動觀察性能狀況時,資料比較顯眼容易觀察;而且dstat支援即時重新整理,譬如輸入dstat 3即每三秒收集一次,但最新的資料都會每秒重新整理顯示。

直接使用dstat,預設使用的是-cdngy參數,分别顯示cpu、disk、net、page、system資訊,預設是1s顯示一條資訊。可以在最後指定顯示一條資訊的時間間隔,如dstat 5是沒5s顯示一條,dstat 5 10表示沒5s顯示一條,一共顯示10條。

預設輸出顯示的資訊說明:

Procs

r:運作的和等待(CPU時間片)運作的程序數,這個值也可以判斷是否需要增加CPU(長期大于1)b:處于不可中斷狀态的程序數,常見的情況是由IO引起的

Memory

swpd: 切換到交換記憶體上的記憶體(預設以KB為機關)。如果 swpd 的值不為0,或者還比較大,比如超過100M了,但是 si, so 的值長期為 0,這種情況我們可以不用擔心,不會影響系統性能。free: 空閑的實體記憶體buff: 作為buffer cache的記憶體,對塊裝置的讀寫進行緩沖cache: 作為page cache的記憶體, 檔案系統的cache。如果 cache 的值大的時候,說明cache住的檔案數多,如果頻繁通路到的檔案都能被cache住,那麼磁盤的讀IO bi 會非常小。

Swap

si: 交換記憶體使用,由磁盤調入記憶體so: 交換記憶體使用,由記憶體調入磁盤

記憶體夠用的時候,這2個值都是0,如果這2個值長期大于0時,系統性能會受到影響。磁盤IO和CPU資源都會被消耗。

我發現有些朋友看到空閑記憶體(free)很少或接近于0時,就認為記憶體不夠用了,實際上不能光看這一點的,還要結合si,so,如果free很少,但是si,so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。

磁盤IO

bi: 從塊裝置讀入的資料總量(讀磁盤) (KB/s)bo: 寫入到塊裝置的資料總理(寫磁盤) (KB/s)

注:随機磁盤讀寫的時候,這2個 值越大(如超出1M),能看到CPU在IO等待的值也會越大

System

in: 每秒産生的中斷次數cs: 每秒産生的上下文切換次數

上面這2個值越大,會看到由核心消耗的CPU時間會越多

Cpu

usr: 使用者程序消耗的CPU時間百分比

us 的值比較高時,說明使用者程序消耗的CPU時間多,但是如果長期超過50% 的使用,那麼我們就該考慮優化程式算法或者進行加速了(比如 PHP/Perl)

sys: 核心程序消耗的CPU時間百分比

sys 的值高時,說明系統核心消耗的CPU資源多,這并不是良性的表現,我們應該檢查原因。

wai: IO等待消耗的CPU時間百分比

wa 的值高時,說明IO等待比較嚴重,這可能是由于磁盤大量作随機通路造成,也有可能是磁盤的帶寬出現瓶頸(塊操作)。

idl: CPU處在空閑狀态時間百分比

七、總結

對于上面的指令,有些是Linux系統自帶的,你可以直接執行。有些是第三方指令,不過絕大多數可以直接通過Yum install xxx或者apt-get intall xxx來安裝。這些指令雖然小巧,但是在我們的伺服器出現問題将會顯得特别有用。

排查伺服器問題,我們一般需要結合多項名額來進行綜合分析研判。例如如果你懷疑VPS主機的IO讀寫有問題,你可以通過iotop來檢視讀寫實時速度,同時用top指令檢視哪些程序來占用CPU和記憶體,這樣結合多項資料就會得到正确的結果。

繼續閱讀