理解 Azure 虚拟机的性能监视
隨著越來越多的用戶將生產應用遷移到云平臺,一些傳統 IT 的運維功能也相應的需要改變,例如監控,備份等等。我們希望通過這一系列的文章來協助用戶更好的理解在 Azure 云平臺上實現資源監控的方法。
在今后的系列文章中,我們會詳細介紹詳細的 Azure 平臺的一些監控服務。由于很多用戶以虛擬機方式遷移之前本地數據中心的生產環境,我們就從虛擬機的監控作為切入點。今天的內容就從最基本的了解虛擬機的性能指標開始。
我們知道 Azure 的宿主機是基于 Hyper-V 平臺,從平臺層面,無論運行的是 Windows 還是 Linux 的虛擬機,Hyper-V 平臺都可以針對虛擬機這個對象來提供一定的性能指標。具體的技術實現細節可以參考: 資源監視介紹。對于磁盤和網絡的指標很容易理解。而 CPU 的計算相對復雜,建議可以仔細閱讀其中關于 CPU 資源的詳細解釋。
| Disk Read Bytes | 上一個采樣周期內的磁盤讀取數據量 |
| Disk Read Operations/Sec | 虛擬機的各個磁盤上每秒讀操作次數的總和 |
| Disk Write Bytes | 上一個采樣周期內的磁盤寫入數據量 |
| Disk Write Operations/Sec | 虛擬機的各個磁盤上每秒寫操作次數的總和 |
| Network In | 虛擬機所有網卡上的進站數據總量 |
| Network Out | 虛擬機所有網卡上的出站數據總量 |
| Percentage CPU | 虛擬機的 CPU 資源的總體運行繁忙程度 |
除了由平臺層面提供的性能指標,虛擬機可以通過內部運行的應用拓展來提供更細節的性能指標。對于 Windows 和 Linux 虛擬機的性能指標,在這里列出的是本人對這些指標的理解,在不同的操作系統上可能有細微的差別。
?
Windows 虛擬機
內存相關
| \Memory\% Committed Bytes in Use | 這兩個計數器都是關于 Committed Bytes。在 Windows 系統的內存管理中,內存使用遵循 Reserve 和 Commit 的方式。Committed Byes 可以認為是系統確認使用的內存。而系統可以使用的內存是有限的,其上限為內存 + Paging File。當 % Committed Bytes in Use 接近 90%,我們可以認為當前虛擬內存的使用已經接近極限,需要特別留意。 |
| \Memory\% Committed Bytes | |
| \Memory\Available Bytes | 在系統中現在可以用于直接滿足內存申請的內存數量。這個數值包括了內存中的 Standby 內存頁列表,Free 內存頁列表和全零內存頁列表。通常情況,如果此計數器低于內存總數的 10%,需要引起注意。但是對于某些特定的生產壓力,如 SQL,Exchange 和 IIS 等,這些應用會從操作系統盡可能多的申請內存來自主管理。因此,僅僅以這一個指標不足以說明是否存在內存不足的問題。通常需要總和考慮 Page/Sec 這個計數器 |
| \Memory\Cache Faults/Sec | Cache Faults 是 Paging Faults 其中的一種,通常由于系統嘗試訪問一個打開文件的某些段數據時,該段數據不在內存中而產生的。注意 Cache Faults 包含 Hard Fault 和 Soft Fault,只有 Hard Fault 的類型才會真正出發磁盤文件讀寫。一般這個計數器被用作內存分析的輔助判斷。 |
| \Memory\Page Faults/Sec | 這幾個計數器是被用作是否存在內存不足情況的最主要計數器。其中 Paging Faults/Sec 指的是系統中產生的內存頁交換請求。注意這個請求包含 Hard Fault 和 Soft Fault。Soft Fault 指的是該請求可以不通過從磁盤上讀寫文件就可以滿足,而 hard fault 指的是必須經過物理磁盤讀寫才可以解決。很顯然,hard fault 更影響系統的性能。因此,我們用 Page/Sec 來標注所有的 Hard Fault。當 Hard Fault 引起的磁盤 IO 超過系統 IO 總量的 70% 時,并參照可用內存的數量,我們可以判斷是否存在內存不足的問題。 |
| \Memory\Page Reads/Sec | |
| \Memory\Page/Sec | |
| \Memory\Pool Nonpaged Bytes | Nonpaged Pool 和 Paged Pool 是操作系統在系統內核定義的兩種內存資源。其中 NonPaged Pool 是指這塊資源必須存儲在物理內存中,而 Paged Pool 可以被寫入頁面交換文件。這兩種資源在操作系統內部是有限的。一旦耗盡會導致系統失去相應。在 64 位系統中,由于地址空間的擴展和內存增大,資源耗盡的問題相對比較少見。監控這兩種資源可以判斷是否存在特定的資源泄露問題。 |
| \Memory\Pool Paged Bytes | |
| \Process(_Total)\Working Set | Working Set是Windows平臺一個常用術語,指的是某個進程在物理內存中使用的內存總量。單個進程的Working Set包含可共享部分(例如DLL文件的代碼段)和私有部分(數據段)。其中可以跟蹤私有部分的Working Set數值來判斷是否內存使用量過高或是否存在內存泄露的問題。 |
| \Process(_Total)\Working Set Private |
| \Processor Information(_Total)\Processor Performance | Processor Frequency 反映了 CPU 的運行頻率而 Processor Performance 反映了 CPU 的運行效能,比如在 CPU 主頻的多大范圍內運行。在物理系統上,由于 CPU 可能存在一些操作系統之外的功能來提高頻率,這個數據有可能超過 100%。而在虛擬機環境中,正常數據應在 100% 以下。通常我們使用 Processor Performance 來判斷 CPU 的負載效能。 |
| \Processor Information(_Total)\Processor Frequency | |
| \Processor Information(_Total)\Parking Status | Parking 一般用于物理系統上有效安排系統的使用的物理內核,這樣可以在負載較低時關閉一定的 CPU 處理能力而節省能源。在虛擬機的運行環境中處理了解 CPU 的負載狀態外,沒有特別的意義。 |
| \Processor Information(_Total)\% Interrupt Time | 系統使用的 CPU 時間片中,用于中斷處理程序(ISR)的 CPU 時間。一般這個計數器的數值很低,在 5% 以下。如果數值較高,很有可能是硬件出現問題導致中斷異常。 |
| \Processor Information(_Total)\% Processor Time | Windows 操作系統中,由于將代碼運行模式劃分為內核態(kernel mode)和用戶態(User Mode),因此代碼的運行時間也就相應被劃分為 % Privileged Time 和 % User Time。而兩者的總和為 % Processor Time。一般來講,桌面應用程序和系統服務的 CPU 異常,反映在 User Time 上,而硬件,驅動程序和內核異常反映在 % Privileged Time 上。 |
| \Processor Information(_Total)\% Privileged Time | |
| \Processor Information(_Total)\% User Time |
| \Process(_Total)\% Processor Time | 操作系統會以每秒 100 次的頻率產生內部中斷,中斷處理程序會去檢查當時 CPU 上運行的各個線程,從而以次數來推斷該線程/進程占用的時間片,繼而計算出全部進程的 CPU 時間占用,即便單個進程的 CPU 統計可能有些的偏差,總計的數值應該精確的反應了 CPU 的負載壓力。 |
| \Process(_Total)\Handle Count | 進程的句柄數一半代表了進程訪問的系統對象的數目。通過判斷句柄數過高,或者有異常增長狀況,可以判斷是否存在資源使用異常,或是泄露問題。 |
| \Process(_Total)\Page Faults/sec | 此計數器同 Memory/Page Faults/sec 意義相同,只是將各個進程引起的 Page Faults 累加得到。 |
| Process(_Total)\Private Bytes | 所有進程的私有內存空間(可以是在物理內存中,或者是在內存交換文件中的空間)總和。一般使用這個計數器來跟蹤私有內存空間的變化趨勢,從而判斷是否有內存泄露的問題。 |
| \Process(_Total)\Thread Count | 所有進程中的線程數目總和。在 Windows 系統中,線程是真正執行代碼的單元。線程數目可以反應出當前系統中運行的代碼單元的多少。線程數目的異常變化,一定程度上反應了系統的負載變化。 |
| \System\Processes | 當前操作系統中運行的進程和線程總數。 |
| \System\Threads | |
| \Thread(_Total)\Context Switches/sec | Context Switch 指的是在 CPU 上運行的線程被其他線程替代。在 Windows 系統中,Context Switch 是一個正常線程處理操作。這個數據的高低并不代表系統是否異常。系統管理員也無法對這個數據進行調整。通常我們可以根據長期觀察到的單個系統上的 Context Switch 數值作為此系統的一個基礎數值。只有出現極度異常的量級改變時,才需要引起注意。而這類問題也多發于物理設備異常。 |
| \PhysicalDisk(_Total)\Disk Read Bytes/sec | 所有磁盤上的每秒讀或寫的數據量 |
| \PhysicalDisk(_Total)\Disk Write Bytes/sec |
| \TCPv4\Connection Failure | 連接失敗的數量。連接失敗指的是連接的狀態從 SYN-SENT 或是 SYN-RCVD 直接被置為 CLOSED,或者是從 SYN-RCVD 狀態置為 LISTEN。 |
| \TCPv4\Connection Established | 當前系統中 TCP 連接的狀態是 ESTABLISHED 或 CLOSE-WAIT 的數目。 |
| \TCPv4\Connection Reset | 連接被重置的數量。重置指的是 TCP 連接的狀態從 ESTABLISHED 或是 CLOSE-WAIT 的直接被置為 CLOSED。 |
| \TCPv4\Segments Received/sec | 當前建立的連接中,每秒接收的數據段,包括錯誤的數據段。 |
| \TCPv4\Segments Restransmitted/sec | 每秒中重傳的數據段數目。重傳的數據段指的是數據段中包括 1 個以上的字節數是以前傳送過的數據。 |
| \TCPv4\Segments Sent/sec | 當前建立的連接中,每秒發送的數據段。但如果一個數據段中只包含之前的重傳數據,則不被計入。 |
此外,Azure 平臺還收集了一些 Windows 系統中應用相關的計數器,如 .Net,由于我們主要討論的是虛擬機層面的監控,在此就不再具體解釋。如果需要,可以參考相應的技術文檔,如: .NET Framework 性能指標
?
Linux 虛擬機部分,感興趣的同學可以通過這里進行查看。
轉載于:https://www.cnblogs.com/cbits/p/7489369.html
總結
以上是生活随笔為你收集整理的理解 Azure 虚拟机的性能监视的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css实现倒8字效果
- 下一篇: Codeforces Round#433