亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Linux上性能異常定位以及性能監(jiān)控

原創(chuàng) 2016-11-15 11:34:43 433
摘要:   引言:大多數(shù)的服務(wù)都是跑在Linux上的,Linux現(xiàn)在也已經(jīng)到了一個很廣泛的應(yīng)用,但是仍然會有很多問題出現(xiàn),我們就來討論下我們性能監(jiān)控的指標(biāo),性能監(jiān)控?zé)o非就是從I/O,內(nèi)存,CPU,TCP連接數(shù),網(wǎng)絡(luò),進(jìn)程或者線程來出發(fā),使用到的命令有iostat,vmstat,sar,mpstat,netstat,ss,iftop,free,pstree/ps,pidstat,top

   引言:大多數(shù)的服務(wù)都是跑在Linux上的,Linux現(xiàn)在也已經(jīng)到了一個很廣泛的應(yīng)用,但是仍然會有很多問題出現(xiàn),我們就來討論下我們性能監(jiān)控的指標(biāo),性能監(jiān)控?zé)o非就是從I/O,內(nèi)存,CPU,TCP連接數(shù),網(wǎng)絡(luò),進(jìn)程或者線程來出發(fā),使用到的命令有iostat,vmstat,sar,mpstat,netstat,ss,iftop,free,pstree/ps,pidstat,top,(uptime)下面來進(jìn)一步深入下吧.

   一,磁盤I/O(iostat)

   我們的機器上有很多的數(shù)據(jù)是存儲在磁盤上的,我們讀取的很多數(shù)據(jù)都是要和磁盤交互的,但是磁盤同時又是一個低速設(shè)備,很多時候會發(fā)生阻塞,所以磁盤I/O的監(jiān)控很重要。我們使用iostat來診斷磁盤的情況。使用的機器是騰訊云主機。

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

tps:該設(shè)備每秒的傳輸次數(shù),表示每秒多少個I/O請求

Blk_read/s:每秒從設(shè)備讀取到的數(shù)據(jù)量

Blk_wrtn/s:每秒向設(shè)備寫入的數(shù)據(jù)量

Blk_read:讀取的總數(shù)據(jù)量

Blk_wrtn:寫入的總數(shù)據(jù)量

%user:代表用戶態(tài)進(jìn)程使用CPU的負(fù)載

%nice:代表優(yōu)先級進(jìn)程使用的CPU負(fù)載

%system:代表內(nèi)核態(tài)進(jìn)程使用的CPU負(fù)載

%iowait:代表CPU等待I/O時,CPU的負(fù)載

%steal:代表被偷走的CPU負(fù)載情況,這個在虛擬化技術(shù)中會用到

%idle:代表空閑的所占用的CPU負(fù)載情況

iostat還有一個常用的參數(shù)選項-x,表示擴展的信息

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

rrqm/s:每秒這個設(shè)備相關(guān)的讀取請求有多少被Merge(多個I/O合并的操作)了

wrqm/s:每秒這個設(shè)備相關(guān)的寫入請求有多少被Merge了

r/s:每秒發(fā)送到設(shè)備的讀請求數(shù)

w/s:每秒發(fā)送到設(shè)備的寫請求數(shù)

rsec/s:每秒讀取設(shè)備扇區(qū)的次數(shù)

wsec/s:每秒寫入設(shè)備扇區(qū)的次數(shù)

avgrq-sz:平均請求扇區(qū)的大小

avgqu-sz:平均請求隊列的長度

await:每一個I/O請求的處理的平均時間(等待時間)

r_await:每一個讀I/O請求的處理的平均時間

w_await:每一個寫I/O請求的處理的平均時間

svctm:表示平均每次I/O操作的服務(wù)時間。如果svctm值和await值很接近,則表示I/O幾乎沒有等待,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊列等待太長

%util:在統(tǒng)計的時間內(nèi)總共有多少的時間用于處理I/O操作,即被消耗的CPU的百分比。例如統(tǒng)計時間間隔是1s,那么這個設(shè)備有0.65s在處理I/O,有0.35s處于空閑。那么這個設(shè)備的%util=0.65/1=65%,一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運行了(當(dāng)然如果是多磁盤,即使%util是100%,因為磁盤的并發(fā)能力,所以磁盤使用未必就到了瓶頸)


   二,內(nèi)存(free)

   在Linux系統(tǒng)中我們查看內(nèi)存使用情況。使用free命令來查看

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

第一行的信息(我們可以認(rèn)為從操作系統(tǒng)層面看待)

total:總物理內(nèi)存大小

used:已經(jīng)分配的大小

free:沒有被分配的大小

shared:共享內(nèi)存的大小,主要用于IPC通信

buffers:用于塊設(shè)備的緩沖

cached:用于文件內(nèi)容緩沖,也就是緩存

"緩存"就是在內(nèi)存中劃分一塊區(qū)域,作為進(jìn)程和硬盤之間的緩沖區(qū),進(jìn)程將數(shù)據(jù)寫入緩存中,當(dāng)那些數(shù)據(jù)需要讀取的時候,就直接去"高速路"緩存中讀取,而不會去"土路"硬盤中讀取,這樣大大的加快性能

這里buffer實際上是存儲了我們數(shù)據(jù)的元數(shù)據(jù)(包括目錄名字,文件大小,文件存儲塊,修改時間,權(quán)限等),而cache則存放了我們最近讀取過的文件。

第三行信息(我們可以認(rèn)為從應(yīng)用程序?qū)用婵创?/p>

這里的-/+ buffers/cache分別為 -buffers/cache  和  +buffers/cache  兩部分

-buffers/cache = used(第一行)-buffers-cached   實際上是當(dāng)前程序上"真實使用"的"物理內(nèi)存"

+buffers/cache = buffers+cached      意思就是暫時"借給"系統(tǒng)作為"緩沖區(qū)"使用的內(nèi)存大小

used=(+buffers/cached)+(-buffers/cached)

所以從應(yīng)用程序?qū)用婵?可用內(nèi)存=free memory+buffers+cached

詳細(xì)信息我們可以通過下面這種方式查看.

  ~ cat /proc/meminfo 

MemTotal:        1020128 kB

MemFree:          670772 kB

Buffers:           97780 kB

Cached:           100980 kB

SwapCached:            0 kB

Active:           164988 kB

Inactive:         117296 kB

Active(anon):      83536 kB

Inactive(anon):      160 kB

Active(file):      81452 kB

Inactive(file):   117136 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:             0 kB

SwapFree:              0 kB

Dirty:                92 kB

Writeback:             0 kB

AnonPages:         83504 kB

Mapped:            17500 kB

Shmem:               172 kB

Slab:              46696 kB

SReclaimable:      28652 kB

SUnreclaim:        18044 kB

KernelStack:        1744 kB

PageTables:         2636 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:      510064 kB

Committed_AS:     343800 kB

VmallocTotal:   34359738367 kB

VmallocUsed:        7112 kB

VmallocChunk:   34359727304 kB

HardwareCorrupted:     0 kB

AnonHugePages:     36864 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:        8184 kB

DirectMap2M:     1040384 kB


   三,CPU(dstat,mpstat)

   首先我們使用dstat命令來查看下我們的CPU情況,他能夠?qū)崟r的輸出我們的信息,

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

每2秒輸出一次,一共輸出10次

cpu:hiq、siq分別為硬中斷和軟中斷次數(shù)

system:int、csw分別為系統(tǒng)的中斷次數(shù)(interrupt)和上下文切換次數(shù)(context switch)。

-c:表示只顯示我們的CPU信息

-m:表示只顯示我們的內(nèi)存信息

-p:表示只顯示我們的進(jìn)程信息

-n:表示只顯示我們的網(wǎng)絡(luò)信息

我們想以什么為什么優(yōu)先順序查看,可以在后面加下列參數(shù)

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

mpstat

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

%user      在internal時間段里,用戶態(tài)的CPU時間(%),不包含nice值為負(fù)進(jìn)程  (usr/total)*100
%nice      在internal時間段里,nice值為負(fù)進(jìn)程的CPU時間(%)   (nice/total)*100
%sys       在internal時間段里,內(nèi)核時間(%)       (system/total)*100
%iowait    在internal時間段里,硬盤IO等待時間(%) (iowait/total)*100
%irq       在internal時間段里,硬中斷時間(%)     (irq/total)*100
%soft      在internal時間段里,軟中斷時間(%)     (softirq/total)*100
%idle      在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%) (idle/total)*100

   四,TCP連接數(shù)(ss,netstat)

   ss是Socket  Statistics的縮寫,顧名思義ss命令就是用來獲取sockets的信息,他可以顯示和netstat類似的內(nèi)容,但是他比netstat更快更高效,而且顯示更為詳細(xì)的有關(guān)TCP連接信息。當(dāng)我們的sockets連接數(shù)非常大的時候,無論是我們使用netstat命令還是在內(nèi)核中查看連接數(shù)cat /proc/net/tcp的時候都會很緩慢。

   ss快速的原因就是他利用了TCP協(xié)議中的tcp_diag,tcp_diag是一個用于分析和統(tǒng)計的模塊,他可以獲取到Linux內(nèi)核中的第一手信息,這個就確保了ss的高效性。

   我們可以對netstat和ss做個對比,有圖有真相嘛

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

netstat命令的時間顯然比ss命令的時間慢多了

   netstat命令 

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

我們可以看到系統(tǒng)中守護進(jìn)程的連接狀態(tài)信息以及監(jiān)聽到的端口號

-t:表示TCP的連接

-u:表示UDP的連接

-n:表示以數(shù)字的形式顯示信息

-p:表示顯示監(jiān)聽的端口號


查看系統(tǒng)中守護進(jìn)程的監(jiān)聽狀態(tài)

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

我們可以看到State狀態(tài)顯示


ss命令

  查看當(dāng)前服務(wù)器的網(wǎng)絡(luò)連接統(tǒng)計: ss -s 

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

其他ss的用法和netstat用法相同


   五,網(wǎng)絡(luò)(iftop)

   使用iftop -i eth0

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

使用Ctrl+c退出,退出顯示

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

我們可以使用-i參數(shù)監(jiān)聽不同的網(wǎng)卡流量信息,在iftop的哪個界面我們可以使用按p來查看端口流量信息

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

   六,進(jìn)程信息(ps/pstree,top,pidstat)

  我們使用pstree來查看下我們的進(jìn)程樹,所有的進(jìn)程都是init進(jìn)程的子進(jìn)程

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

ps命令

查看具體的進(jìn)程,比如MySQL進(jìn)程我們可以使用ps aux mysqld或者ps -elf mysqld這種方式,這兩種本質(zhì)上沒有什么區(qū)別,因為Linux繼承的是Unix的一些思想,一個是Unix的Sys-v風(fēng)格,一個是BSD的風(fēng)格

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

我們可以詳細(xì)的看到他的信息

pidstat命令

我們可以使用pidstat來查看每一個進(jìn)程的pid的狀態(tài)信息,以及他所占的CPU信息

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

 六,綜合顯示(vmstat,top,sar)

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

我們看到內(nèi)存,交換分區(qū),I/O,CPU,以及進(jìn)程上下文切換次數(shù)

top命令

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

在這個界面下:

按m按照內(nèi)存使用大小排序顯示

按P按照CPU使用大小排序顯示 

按M按照常駐留內(nèi)存大小排序

按k表示殺死某個進(jìn)程


sar命令

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

   有時候我們可能需要統(tǒng)計下我們的Linux啟動了多長時間,我們可以使用uptime命令來顯示這個信息,top也可以顯示

   uptime命令

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

top命令顯示

wKioL1gpuyiQg_r1AAAg8NiIJgI696.png

發(fā)布手記

熱門詞條