理解 Azure 虛擬機(jī)的性能監(jiān)視

隨著越來越多的用戶將生產(chǎn)應(yīng)用遷移到云平臺,一些傳統(tǒng) IT 的運(yùn)維功能也相應(yīng)的需要改變,例如監(jiān)控,備份等等。我們希望通過這一系列的文章來協(xié)助用戶更好的理解在 Azure 云平臺上實(shí)現(xiàn)資源監(jiān)控的方法。

在今后的系列文章中,我們會詳細(xì)介紹詳細(xì)的 Azure 平臺的一些監(jiān)控服務(wù)。由于很多用戶以虛擬機(jī)方式遷移之前本地?cái)?shù)據(jù)中心的生產(chǎn)環(huán)境,我們就從虛擬機(jī)的監(jiān)控作為切入點(diǎn)。今天的內(nèi)容就從最基本的了解虛擬機(jī)的性能指標(biāo)開始。

我們知道 Azure 的宿主機(jī)是基于 Hyper-V 平臺,從平臺層面,無論運(yùn)行的是 Windows 還是 Linux 的虛擬機(jī),Hyper-V 平臺都可以針對虛擬機(jī)這個對象來提供一定的性能指標(biāo)。具體的技術(shù)實(shí)現(xiàn)細(xì)節(jié)可以參考:資源監(jiān)視介紹。對于磁盤和網(wǎng)絡(luò)的指標(biāo)很容易理解。而 CPU 的計(jì)算相對復(fù)雜,建議可以仔細(xì)閱讀其中關(guān)于 CPU 資源的詳細(xì)解釋。

計(jì)數(shù)器說明

Disk Read Bytes上一個采樣周期內(nèi)的磁盤讀取數(shù)據(jù)量

Disk Read Operations/Sec虛擬機(jī)的各個磁盤上每秒讀操作次數(shù)的總和

Disk Write Bytes上一個采樣周期內(nèi)的磁盤寫入數(shù)據(jù)量

Disk Write Operations/Sec虛擬機(jī)的各個磁盤上每秒寫操作次數(shù)的總和

Network In虛擬機(jī)所有網(wǎng)卡上的進(jìn)站數(shù)據(jù)總量

Network Out虛擬機(jī)所有網(wǎng)卡上的出站數(shù)據(jù)總量

Percentage CPU虛擬機(jī)的 CPU 資源的總體運(yùn)行繁忙程度

除了由平臺層面提供的性能指標(biāo),虛擬機(jī)可以通過內(nèi)部運(yùn)行的應(yīng)用拓展來提供更細(xì)節(jié)的性能指標(biāo)。對于 Windows 和 Linux 虛擬機(jī)的性能指標(biāo),在這里列出的是本人對這些指標(biāo)的理解,在不同的操作系統(tǒng)上可能有細(xì)微的差別。

Windows 虛擬機(jī)

內(nèi)存相關(guān)

計(jì)數(shù)器說明

\Memory\% Committed Bytes in Use這兩個計(jì)數(shù)器都是關(guān)于 Committed Bytes。在 Windows 系統(tǒng)的內(nèi)存管理中,內(nèi)存使用遵循 Reserve 和 Commit 的方式。Committed Byes 可以認(rèn)為是系統(tǒng)確認(rèn)使用的內(nèi)存。而系統(tǒng)可以使用的內(nèi)存是有限的,其上限為內(nèi)存 + Paging File。當(dāng) % Committed Bytes in Use 接近 90%,我們可以認(rèn)為當(dāng)前虛擬內(nèi)存的使用已經(jīng)接近極限,需要特別留意。

\Memory\% Committed Bytes

\Memory\Available Bytes在系統(tǒng)中現(xiàn)在可以用于直接滿足內(nèi)存申請的內(nèi)存數(shù)量。這個數(shù)值包括了內(nèi)存中的 Standby 內(nèi)存頁列表,F(xiàn)ree 內(nèi)存頁列表和全零內(nèi)存頁列表。通常情況,如果此計(jì)數(shù)器低于內(nèi)存總數(shù)的 10%,需要引起注意。但是對于某些特定的生產(chǎn)壓力,如 SQL,Exchange 和 IIS 等,這些應(yīng)用會從操作系統(tǒng)盡可能多的申請內(nèi)存來自主管理。因此,僅僅以這一個指標(biāo)不足以說明是否存在內(nèi)存不足的問題。通常需要總和考慮 Page/Sec 這個計(jì)數(shù)器

\Memory\Cache Faults/SecCache Faults 是 Paging Faults 其中的一種,通常由于系統(tǒng)嘗試訪問一個打開文件的某些段數(shù)據(jù)時,該段數(shù)據(jù)不在內(nèi)存中而產(chǎn)生的。注意 Cache Faults 包含 Hard Fault 和 Soft Fault,只有 Hard Fault 的類型才會真正出發(fā)磁盤文件讀寫。一般這個計(jì)數(shù)器被用作內(nèi)存分析的輔助判斷。

\Memory\Page Faults/Sec這幾個計(jì)數(shù)器是被用作是否存在內(nèi)存不足情況的最主要計(jì)數(shù)器。其中 Paging Faults/Sec 指的是系統(tǒng)中產(chǎn)生的內(nèi)存頁交換請求。注意這個請求包含 Hard Fault 和 Soft Fault。Soft Fault 指的是該請求可以不通過從磁盤上讀寫文件就可以滿足,而 hard fault 指的是必須經(jīng)過物理磁盤讀寫才可以解決。很顯然,hard fault 更影響系統(tǒng)的性能。因此,我們用 Page/Sec 來標(biāo)注所有的 Hard Fault。當(dāng) Hard Fault 引起的磁盤 IO 超過系統(tǒng) IO 總量的 70% 時,并參照可用內(nèi)存的數(shù)量,我們可以判斷是否存在內(nèi)存不足的問題。

\Memory\Page Reads/Sec

\Memory\Page/Sec

\Memory\Pool Nonpaged BytesNonpaged Pool 和 Paged Pool 是操作系統(tǒng)在系統(tǒng)內(nèi)核定義的兩種內(nèi)存資源。其中 NonPaged Pool 是指這塊資源必須存儲在物理內(nèi)存中,而 Paged Pool 可以被寫入頁面交換文件。這兩種資源在操作系統(tǒng)內(nèi)部是有限的。一旦耗盡會導(dǎo)致系統(tǒng)失去相應(yīng)。在 64 位系統(tǒng)中,由于地址空間的擴(kuò)展和內(nèi)存增大,資源耗盡的問題相對比較少見。監(jiān)控這兩種資源可以判斷是否存在特定的資源泄露問題。

\Memory\Pool Paged Bytes

\Process(_Total)\Working SetWorking Set是Windows平臺一個常用術(shù)語,指的是某個進(jìn)程在物理內(nèi)存中使用的內(nèi)存總量。單個進(jìn)程的Working Set包含可共享部分(例如DLL文件的代碼段)和私有部分(數(shù)據(jù)段)。其中可以跟蹤私有部分的Working Set數(shù)值來判斷是否內(nèi)存使用量過高或是否存在內(nèi)存泄露的問題。

\Process(_Total)\Working Set Private

處理器相關(guān)

計(jì)數(shù)器說明

\Processor Information(_Total)\Processor PerformanceProcessor Frequency 反映了 CPU 的運(yùn)行頻率而 Processor Performance 反映了 CPU 的運(yùn)行效能,比如在 CPU 主頻的多大范圍內(nèi)運(yùn)行。在物理系統(tǒng)上,由于 CPU 可能存在一些操作系統(tǒng)之外的功能來提高頻率,這個數(shù)據(jù)有可能超過 100%。而在虛擬機(jī)環(huán)境中,正常數(shù)據(jù)應(yīng)在 100% 以下。通常我們使用 Processor Performance 來判斷 CPU 的負(fù)載效能。

\Processor Information(_Total)\Processor Frequency

\Processor Information(_Total)\Parking StatusParking 一般用于物理系統(tǒng)上有效安排系統(tǒng)的使用的物理內(nèi)核,這樣可以在負(fù)載較低時關(guān)閉一定的 CPU 處理能力而節(jié)省能源。在虛擬機(jī)的運(yùn)行環(huán)境中處理了解 CPU 的負(fù)載狀態(tài)外,沒有特別的意義。

\Processor Information(_Total)\% Interrupt Time系統(tǒng)使用的 CPU 時間片中,用于中斷處理程序(ISR)的 CPU 時間。一般這個計(jì)數(shù)器的數(shù)值很低,在 5% 以下。如果數(shù)值較高,很有可能是硬件出現(xiàn)問題導(dǎo)致中斷異常。

\Processor Information(_Total)\% Processor TimeWindows 操作系統(tǒng)中,由于將代碼運(yùn)行模式劃分為內(nèi)核態(tài)(kernel mode)和用戶態(tài)(User Mode),因此代碼的運(yùn)行時間也就相應(yīng)被劃分為 % Privileged Time 和 % User Time。而兩者的總和為 % Processor Time。一般來講,桌面應(yīng)用程序和系統(tǒng)服務(wù)的 CPU 異常,反映在 User Time 上,而硬件,驅(qū)動程序和內(nèi)核異常反映在 % Privileged Time 上。

\Processor Information(_Total)\% Privileged Time

\Processor Information(_Total)\% User Time

系統(tǒng)資源,進(jìn)程相關(guān)

計(jì)數(shù)器說明

\Process(_Total)\% Processor Time操作系統(tǒng)會以每秒 100 次的頻率產(chǎn)生內(nèi)部中斷,中斷處理程序會去檢查當(dāng)時 CPU 上運(yùn)行的各個線程,從而以次數(shù)來推斷該線程/進(jìn)程占用的時間片,繼而計(jì)算出全部進(jìn)程的 CPU 時間占用,即便單個進(jìn)程的 CPU 統(tǒng)計(jì)可能有些的偏差,總計(jì)的數(shù)值應(yīng)該精確的反應(yīng)了 CPU 的負(fù)載壓力。

\Process(_Total)\Handle Count進(jìn)程的句柄數(shù)一半代表了進(jìn)程訪問的系統(tǒng)對象的數(shù)目。通過判斷句柄數(shù)過高,或者有異常增長狀況,可以判斷是否存在資源使用異常,或是泄露問題。

\Process(_Total)\Page Faults/sec此計(jì)數(shù)器同 Memory/Page Faults/sec 意義相同,只是將各個進(jìn)程引起的 Page Faults 累加得到。

Process(_Total)\Private Bytes所有進(jìn)程的私有內(nèi)存空間(可以是在物理內(nèi)存中,或者是在內(nèi)存交換文件中的空間)總和。一般使用這個計(jì)數(shù)器來跟蹤私有內(nèi)存空間的變化趨勢,從而判斷是否有內(nèi)存泄露的問題。

\Process(_Total)\Thread Count所有進(jìn)程中的線程數(shù)目總和。在 Windows 系統(tǒng)中,線程是真正執(zhí)行代碼的單元。線程數(shù)目可以反應(yīng)出當(dāng)前系統(tǒng)中運(yùn)行的代碼單元的多少。線程數(shù)目的異常變化,一定程度上反應(yīng)了系統(tǒng)的負(fù)載變化。

\System\Processes當(dāng)前操作系統(tǒng)中運(yùn)行的進(jìn)程和線程總數(shù)。

\System\Threads

\Thread(_Total)\Context Switches/secContext Switch 指的是在 CPU 上運(yùn)行的線程被其他線程替代。在 Windows 系統(tǒng)中,Context Switch 是一個正常線程處理操作。這個數(shù)據(jù)的高低并不代表系統(tǒng)是否異常。系統(tǒng)管理員也無法對這個數(shù)據(jù)進(jìn)行調(diào)整。通常我們可以根據(jù)長期觀察到的單個系統(tǒng)上的 Context Switch 數(shù)值作為此系統(tǒng)的一個基礎(chǔ)數(shù)值。只有出現(xiàn)極度異常的量級改變時,才需要引起注意。而這類問題也多發(fā)于物理設(shè)備異常。

磁盤相關(guān)

計(jì)數(shù)器說明

\PhysicalDisk(_Total)\Disk Read Bytes/sec所有磁盤上的每秒讀或?qū)懙臄?shù)據(jù)量

\PhysicalDisk(_Total)\Disk Write Bytes/sec

網(wǎng)絡(luò)相關(guān)

計(jì)數(shù)器說明

\TCPv4\Connection Failure連接失敗的數(shù)量。連接失敗指的是連接的狀態(tài)從 SYN-SENT 或是 SYN-RCVD 直接被置為 CLOSED,或者是從 SYN-RCVD 狀態(tài)置為 LISTEN。

\TCPv4\Connection Established當(dāng)前系統(tǒng)中 TCP 連接的狀態(tài)是 ESTABLISHED 或 CLOSE-WAIT 的數(shù)目。

\TCPv4\Connection Reset連接被重置的數(shù)量。重置指的是 TCP 連接的狀態(tài)從 ESTABLISHED 或是 CLOSE-WAIT 的直接被置為 CLOSED。

\TCPv4\Segments Received/sec當(dāng)前建立的連接中,每秒接收的數(shù)據(jù)段,包括錯誤的數(shù)據(jù)段。

\TCPv4\Segments Restransmitted/sec每秒中重傳的數(shù)據(jù)段數(shù)目。重傳的數(shù)據(jù)段指的是數(shù)據(jù)段中包括 1 個以上的字節(jié)數(shù)是以前傳送過的數(shù)據(jù)。

\TCPv4\Segments Sent/sec當(dāng)前建立的連接中,每秒發(fā)送的數(shù)據(jù)段。但如果一個數(shù)據(jù)段中只包含之前的重傳數(shù)據(jù),則不被計(jì)入。

此外,Azure 平臺還收集了一些 Windows 系統(tǒng)中應(yīng)用相關(guān)的計(jì)數(shù)器,如 .Net,由于我們主要討論的是虛擬機(jī)層面的監(jiān)控,在此就不再具體解釋。如果需要,可以參考相應(yīng)的技術(shù)文檔,如:.NET Framework 性能指標(biāo)

Linux 虛擬機(jī)

與 Windows 虛擬機(jī)不同的是,Windows 虛擬機(jī)的某些性能指標(biāo)指定了 _Total,也就是說系統(tǒng)已經(jīng)統(tǒng)計(jì)了同一個指標(biāo)在多個實(shí)例上的數(shù)據(jù),比如多 CPU 系統(tǒng),多個磁盤系統(tǒng)。在 Linux 虛擬機(jī)中,我們可以指定的是針對某一個特定實(shí)例還是總計(jì)的數(shù)值。具體設(shè)置請參照 :使用 Linux 診斷擴(kuò)展監(jiān)視性能指標(biāo)及日志

內(nèi)存相關(guān):

計(jì)數(shù)器說明

Mem. Percent available當(dāng)前系統(tǒng)的可用內(nèi)存比例

Mem. Used by cache系統(tǒng)內(nèi)存中被磁盤緩存使用的數(shù)量

Memory available當(dāng)前系統(tǒng)可以使用的內(nèi)存??捎脙?nèi)存指的是系統(tǒng)在收到內(nèi)存請求時,可以不需要進(jìn)行 Paging 操作,而直接可以使用的內(nèi)存。他包括 Free 的內(nèi)存和一部分可以被重新使用的 Cache 內(nèi)存。

Memory percentage已用內(nèi)存的比例

Memory used已用內(nèi)存的數(shù)量

Page reads每秒中從后端存儲中(swap file, program file, mapped file)讀取\寫入\總計(jì)的內(nèi)存頁的個數(shù)。這個數(shù)據(jù)對應(yīng)于 Windows 平臺的 Pages/Sec。

Page writes

Pages

Swap available這些數(shù)據(jù)分別對應(yīng)了 swap 文件的可用空間大小,可用空間比例,已經(jīng)使用的比例和已經(jīng)使用的大小。

Swap percent available

Swap percent used

Swap used

Note

對于可用內(nèi)存的理解,可以參照文檔

處理器相關(guān)

計(jì)數(shù)器說明

CPU DPC time在 Linux 中很少提到 DPC Time, DPC 是在 Windows 平臺中常用的一個術(shù)語,是中斷處理程序?qū)⒁恍┛梢圆辉谥袛嗵幚磉M(jìn)程中的任務(wù),以 DPC 的方式執(zhí)行。在 Linux 中,這個數(shù)據(jù)應(yīng)該是 SoftIRQ 的時間。應(yīng)該是在 Interrupt 的一部分。

CPU IO wait Time這個時間很容易被理解為 CPU 等待同步 IO 完成的時間。實(shí)際上, IO Wait Time 是,CPU Idle Time 的一個子集。他指的是當(dāng)某個 CPU 處于空閑狀態(tài)時,至少有一個任務(wù)在等待他的磁盤 IO 完成,進(jìn)而可以在此 CPU 上繼續(xù)運(yùn)行。因此,較低的 IO wait Time 并不能代表理想的磁盤性能,我們必須結(jié)合 CPU 的數(shù)量,使用率,磁盤的讀寫性能,讀寫模式來具體分析。

CPU idle timeCPU 在運(yùn)行空閑進(jìn)程的時間

CPU Interrupt timeCPU 運(yùn)行在 Interrupt 模式的時間,包括硬件中斷和軟件中斷。

CPU nice timeCPU 上運(yùn)行 niced 進(jìn)程所用到的時間。niced 進(jìn)程指的是進(jìn)程的 nice 級別(Priority)被改變的進(jìn)程。

CPU percentageCPU 上運(yùn)行非 Idle 線程的時間比例。

CPU privileged time在非 Idle 時間內(nèi),用于運(yùn)行 Kernel 模式進(jìn)程的時間比例

CPU user timeCPU 上運(yùn)行非 niced 進(jìn)程所用到的時間。

磁盤相關(guān)

計(jì)數(shù)器說明

Disk queue length磁盤隊(duì)列長度。對于 Azure 標(biāo)準(zhǔn)存儲賬戶中的磁盤,我們可以認(rèn)為是 Spindle 是 1 的標(biāo)準(zhǔn) IDE 磁盤。由于隊(duì)列長度會影響磁盤 IO 完成的時間,如果 Disk Queue Length 持續(xù)高于 1,說明總是有磁盤 IO 在等待處理。需要結(jié)合 Disk Transfer Time 來判斷當(dāng)前的 IO 壓力是否超過磁盤能力。

Disk read guest OS每秒磁盤中數(shù)據(jù)讀取的總量

Disk read time完成每次讀 IO 操作時需要的平均時間

Disk reads每秒磁盤上的進(jìn)行讀操作的次數(shù)

Disk total bytes每秒磁盤中數(shù)據(jù)傳輸?shù)目偭?,包括讀取和寫入的數(shù)據(jù)總量。

Disk transfer time完成每次 IO 操作是需要的平均時間,一般來說,對于生產(chǎn)系統(tǒng),理想的 IO 操作需要在 10ms 以內(nèi)完成。超過 10ms,需要對具體的 IO 進(jìn)行分析并引起注意。如果 IO 完成時間總是在 30ms 甚至以上,磁盤的效能應(yīng)該不能滿足當(dāng)前的 IO 需求。

Disk transfers每秒磁盤上的進(jìn)行讀或?qū)懖僮鞯拇螖?shù),也就是經(jīng)常提到的 IOPS。

Disk write guest OS每秒磁盤中數(shù)據(jù)寫入的總量

Disk write time完成每次寫 IO 操作時需要的平均時間

Disk writes每秒磁盤上的進(jìn)行寫操作的次數(shù)

網(wǎng)絡(luò)相關(guān)

計(jì)數(shù)器說明

Network collisions從系統(tǒng)啟動開始發(fā)生的網(wǎng)絡(luò)沖突數(shù)量。如果持續(xù)出現(xiàn)沖突值表示網(wǎng)絡(luò)基礎(chǔ)架構(gòu)存在性能瓶頸,而并非服務(wù)器。在 Azure 平臺上,不應(yīng)該看到網(wǎng)絡(luò)沖突的發(fā)生。

Network in guest OS從系統(tǒng)啟動開始計(jì)算的網(wǎng)絡(luò)出口流量

Network out guest OS從系統(tǒng)啟動開始計(jì)算的網(wǎng)絡(luò)入口流量

Network total bytes從系統(tǒng)啟動開始計(jì)算的網(wǎng)絡(luò)傳輸數(shù)據(jù)總量

Packets received從系統(tǒng)啟動開始計(jì)算的接收到的數(shù)據(jù)包個數(shù)

Packets received errors從系統(tǒng)啟動開始計(jì)算的接收端數(shù)據(jù)包錯誤的個數(shù)

Packets sent從系統(tǒng)啟動開始計(jì)算的發(fā)送的數(shù)據(jù)包個數(shù)

Packets sent errors從系統(tǒng)啟動開始計(jì)算的發(fā)送端數(shù)據(jù)包錯誤的個數(shù)

以上是我們在 Azure 的管理門戶中常用的性能技術(shù)器,在了解了這些計(jì)數(shù)器內(nèi)容的基礎(chǔ)上,我們可以設(shè)定警報,或是自動縮放功能。在下一篇文章中我們會具體了解這些數(shù)據(jù)是如何被收集并存放的。

立即訪問http://market.azure.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容