首頁 >php教程 >PHP开发 >Linux上效能異常定位以及效能監控

Linux上效能異常定位以及效能監控

高洛峰
高洛峰原創
2016-11-08 10:25:361625瀏覽

   引言:大多數的服務都是跑在Linux上的,Linux現在也已經到了一個很廣泛的應用,但是仍然會有很多問題出現,我們就來討論下我們性能監控的指標,性能監控無非就是從I/O,內存,CPU,TCP連接數,網絡,進程或線程來出發,使用到的命令有iostat,vmstat,sar,mpstat,netstat,ss,iftop,free,pstree/ps,pidstat,top,( uptime)下面來進一步深入下吧.

   一,磁碟I/O(iostat)

   我們的機器上有很多的資料是儲存在磁碟上的,我們讀取的許多資料都是要和磁碟互動的,但是磁碟同時又是一個低速設備,很多時候會發生阻塞,所以磁碟I/O的監控很重要。我們使用iostat來診斷磁碟的情況。使用的機器是騰訊雲主機。

Linux上效能異常定位以及效能監控

ps:此裝置每秒的傳輸次數,表示每秒多少個I/O要求

Blk_read/s:每秒從裝置讀取到的資料量

Blk_wrtn/s:每每秒寫入的資料量

Blk_read:讀取的總資料量

Blk_wrtn:寫入的總資料量

%user:代表使用者態進程使用CPU的負載

%nice

%user:代表使用者態進程使用CPU的負載

%nice:%使用的CPU負載

%system:代表核心態進程使用的CPU負載

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

%steal:代表被偷走的CPU負載狀況,這個在虛擬化技術中會用到

%idle:代表空閒的所佔用的CPU負載情況

Linux上效能異常定位以及效能監控iostat還有一個常用的參數選項-x,表示擴展的資訊


rrqm/s:這個設備相關的讀取請求有多少被Merge(多個I/O合併的操作)了

wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了


r/s:每秒發送到設備的讀取請求數

w/s:每秒發送到設備的寫入請求數

rsec/s:每秒讀取設備扇區的次數

wsec/s:每秒寫入設備扇區的次數

avgrq-sz:平均請求扇區的大小

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

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

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

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

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


%util:在統計的時間內總共有多少的時間用於處理I/O操作,即被消耗的CPU的百分比。例如統計時間間隔是1s,那麼這個裝置有0.65s在處理I/O,有0.35s處於空閒。那麼這個設備的%util=0.65/1=65%,一般地,如果該參數是100%表示設備已經接近滿載運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的並發能力,所以磁碟使用未必就到了瓶頸)

   二,內存(free)

Linux上效能異常定位以及效能監控   在Linux系統中我們查看內存使用情況。使用free指令來查看


第一行的資訊(我們可以認為從作業系統層面看待)

total:總實體記憶體大小


used:已經分配的大小

free:沒有被分配的大小

shared:共享記憶體的大小,主要用於IPC通訊

buffers:用於區塊裝置的緩衝


cached:用於檔案內容緩衝,也就是快取

"快取"就是在記憶體中分割一塊區域,作為進程和硬碟之間的緩衝區,進程將資料寫入快取中,當那些資料需要讀取的時候,就直接去"高速路"快取中讀取,而不會去"土路"硬碟中讀取,這樣大大的加快性能

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


第三行資訊(我們可以認為從應用程式層面看待)

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

-buffers/cache = used一行)-buffers-cached   其實是目前程式上"真實使用"的"實體記憶體"

+buffers/cache = buffers+cached      意思是暫時"借給"系統作為"緩衝區"所使用的記憶體大小

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

所以從應用程式層面看,可用記憶體=free memory+buffers+cached

詳細資料我們可以透過下面這種方式查看🎜 ~ cat /proc/meminfo 🎜

MemTotal:        1020128 kB

MemFree:         670772 kB 97

緩衝區:     980 kB

SwapCached:             0 kB

活動:           164988 kB

非活動:   17 83536 kB

非活動(匿名):      160 kB

非活動(匿名):      160 kB

非活動(匿名):      160 kB

活動(文件):      81452 kB

非活動(文件): 117136 kB         0 kB

交換總計:             0 kB

交換空閒:              0 kB

臟:                92 kB    83504 kB

映射:            17500 kB

Shmem:           

S可回收: 28652 kB

S 不可回收:        18044 kB

核心堆疊:        1744 kB 4  0 kB

反彈:                0 kB

WritebackTmp:          0 kB

CommitLimit 0      0 kB

CommitLimit:0 kB

Comfilled_AS:   343800 kB

VmallocTotal: 34359738367 kB

VmallocUsed :   750  

硬體損壞:     0 kB

AnonHugePages:     36864 kB

HugePages_Total:       0

HugePages_Total:       0

HugePages_Total:    HugePages_Rsvd:        0

HugePages_Surp:       0

Hugepagesize:      irectMap2M:     1040384 kB

 三,CPU(dstat,mpstat)

 首先我們使用dstat指令來檢視我們的CPU情況,他能夠即時的輸出我們的訊息,

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

cpu:hiq、siq分別為硬中斷和軟中斷次數

cpu:hiq、siq分別為硬中斷和軟中斷次數

system:int、cswsystem分別為系統的中斷次數(中斷)與上下文切換次數(上下文切換次數) )。

-c:表示只顯示我們的CPU資訊


-m:表示只顯示我們的記憶體資訊

-p:表示只顯示我們的進程資訊

-n:表示只顯示我們的進程資訊的網路資訊

Linux上效能異常定位以及效能監控我們想以什麼優先順序查看,可以在後面加上以下參數


mpstat


%user     在內部時間段裡,用戶態的時間段Nice 值負進程 (usr/total)*100
%nice      在內部時間段裡,nice 值負進程的CPU時間(%)   (nice/total)*100

%sys      在內部時間段裡,核心時間(% )       (system/total)*100

%iowait    在內部時間段裡,硬碟IO等待時間(%) (iowait/total)*100
%irq       在內部時段裡,硬碟中斷時間(%) 硬碟 )*100

%soft      在內部時間段裡,軟中斷時間(%)     (softirq/total)*100

%idle      在內部時間段裡,CPU佔用等待系統作業外部的因為任何原因而閒置的時間段時間(%) (idle/total)*100

  四,TCP連線數(ss,netstat)

  資訊是Socket Statistics的縮寫,顧名思義ss指令就是用來取得sockets的類似,他可以顯示和netstat的內容,但是他比netstat更快更多,而且顯示更有效率還是詳細的有關TCP連接資訊。當我們的sockets連線數非常大的時候,無論是我們使用netstat指令在內核中查看連線數cat /proc/net/tcp的時候都會很緩慢。

   ss快速的原因就是他利用了TCP協定中的tcp_diag,tcp_diag是一個用於分析和統計的模組,他可以獲取到Linux核心中的第一手信息,這個就確保了ss的高效性。

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

Linux上效能異常定位以及效能監控

Linux上效能異常定位以及效能監控

 可以看到系統中守護程序的連線狀態資訊以及監聽到的連接埠號碼

-t:表示TCP的連線

-u:表示UDP的連線Linux上效能異常定位以及效能監控

-n:表示以數字的形式顯示訊息

-p:表示顯示監聽的連接埠號碼

查看系統中守護程序的監聽狀態


我們可以看到State狀態顯示

: 網頁指令s Linux上效能異常定位以及效能監控

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

   五,網路(iftop)

 . Linux上效能異常定位以及效能監控

我們可以使用-i參數監聽不同的網卡流量信息,在iftop的哪個界面我們可以使用按p來查看端口流量信息


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

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

Linux上效能異常定位以及效能監控

ps命令

Linux上效能異常定位以及效能監控查看具體的進程,例如MySQL進程我們可以使用ps aux mysqld或者ps -elf mysqld這種方式,這兩種本質上沒有什麼區別,因為Linux繼承的是Unix的一些思想,一個是Unix的Sys-v風格,一個是BSD的風格

Linux上效能異常定位以及效能監控我們可以詳細的看到他的信息

pidstat指令

我們可以使用pidstat來查看每一個進程的pid的狀態信息,以及他所佔的CPU信息

Linux上效能異常定位以及效能監控

綜合顯示(vmstat,top,sar)

綜合顯示(vmstat,top,sar)Linux上效能異常定位以及效能監控

綜合顯示(vmstat,top,sar)

交換分區,I/O,CPU,以及進程上下文切換次數

Linux上效能異常定位以及效能監控top指令

Linux上效能異常定位以及效能監控在這個介面下:

按m依照記憶體使用大小排序顯示

按PCPU使用尺寸按M按照常駐記憶體大小排序

按k表示殺死某個進程Linux上效能異常定位以及效能監控

sar命令

   有時候我們可能需要統計下我們的Linux啟動了多長時間,我們可以使用了多長時間uptime指令來顯示這個資訊,top也可以顯示

   uptime指令


top指令顯示

Linux上效能異常定位以及效能監控

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn