診斷 VM 上緩慢的數據處理
我們正在嘗試從 VM 內部診斷顯然執行緩慢的 VM。
情況:
- 我們在 6 核 12GB 虛擬機上執行的 Windows Server 2008R2 上有一個 IIS 託管應用程序。
- 我們有一個在 SQL Server 2008R2 SP3 集群(16+ 核,>16GB RAM)上執行的數據庫
- 應用程序正在處理針對該數據庫的消息隊列。處理主要包括查詢/獲取和更新,每條消息可能有十幾個往返。有限數量的執行緒 (3) 分配給此工作負載,這是同步的,因此執行緒會阻塞數據庫響應。
- 數據庫顯然負載很輕:只有最大 CPU 負載的百分之幾。
- 據我們所知,數據庫和虛擬機主機都在同一個數據中心。
數據庫報告在等待非同步網路 IO 上花費了相當多的時間,即。等待應用程序消費數據。應用程序 VM 的負載顯然也很輕:~20% CPU。基礎設施不歸我們所有,我們唯一的訪問權限是通過 RDP 訪問虛擬機,以及 SQL Management Studio 訪問數據庫集群。儘管我們確實記錄了數據庫和 VM 的性能計數器,但我們沒有足夠的權限來執行分析器。
幾週前,消息處理率突然下降了 70-80%。據我們所知,什麼都沒有改變:應用程序沒有被修改或重新配置,性能計數器沒有表明負載特性有任何變化。基礎設施的所有者表示,他們最終沒有任何改變。
作為重新啟動過程的一部分,應用程序被要求重新載入其消息隊列。這涉及幾十萬行的一個簡單 SELECT,然後將其讀入記憶體結構。數據庫在幾秒鐘內為 SELECT 提供服務,但隨後在應用程序讀取結果集時等待了大約 10 分鐘。這是一個涉及非常簡單的反序列化的單執行緒操作,在此硬體上花費的時間不應超過幾分鐘。
我目前的理論是網路延遲以某種方式增加,但 ping 只報告“<1ms”,而且我們在任何情況下都沒有基線。hrPing 報告從應用伺服器到數據庫的時間在 0.5 到 2 毫秒之間。
另一種可能性是虛擬機的實際 CPU 容量以某種方式減少了,但我希望這會表現為“表觀”負載增加。
我們還有其他調查途徑嗎?
感謝所有的建議!這種情況最終得到了解決,儘管我們還沒有被告知是VM主機還是網路行為不端,也沒有確切地知道做了什麼來修復它。
在故障排除過程中,我們編寫了一個簡單的應用程序來分析某些數據庫操作,並嘗試查明平台不健全的確切方式:
https://github.com/BluewireTechnologies/db-latency
基本上,數據庫
statistics time
聲稱已經過了 0 毫秒,而 SQL 客戶端偶爾會非常確定它花了幾百毫秒等待 ExecuteReader() 回來,這表明網路問題或可能是虛擬機缺乏時間片。這些尖峰將影響大約 5% 的數據庫往返,並且使通常的瞬時操作很可能需要幾秒鐘才能完成。客戶的一位技術人員自己編譯並使用了該工具。他確認了我們的調查結果並將其轉發給相應的團隊,幾個小時後問題就解決了。
正如每個人都懷疑的那樣,這確實很可能是網路問題!
我從來都不是專家,但這是我的 2 美分:
1) 消除疑慮:
將 2 個大文件夾從數據庫傳輸到應用伺服器,反之則大約 500 MB。1 文件夾應包含一個大小為 500 MB 的二進製文件。第二個文件夾應包含數千/數百萬個文件,所有文件都在 1KB 或更少,並查看每個案例的網路性能。第一個將向您展示低數據包計數高負載流的模擬,第二個(將模擬 DB 事務)將向您展示高數據包計數低負載流的模擬。這將使您了解他們在那裡可用的網路環境類型,以及您的網路問題是否屬實。請記住,交換容量不僅僅是埠速度。10 MB/s 到達 10 個數據包與 10 MB/s 到達 100,000 個數據包在交換機上的負載(交換機 CPU 使用率)不同… 無論有效負載如何,交換機都必須傳輸每個數據包,如果您沒有足夠的交換容量(每秒數據包),您很容易導致網路飽和。現在可能 (99.9%) 不會在數據中心出現這種情況,但在您進行測試之前,您永遠無法確定
2)第二點應用配置:
我希望這是您的應用程序並且您正確配置了它,如果沒有,大多數 JDBC 驅動程序都有批處理事務,有時如果沒有在您的持久性提供程序中明確定義,可能會導致類似於您遇到的行為(應用程序等待一定數量在實際送出事務之前的寫入次數或在執行查詢之前等待多次讀取)。即使那樣,這些批處理操作也會有大約一秒或 2 秒的超時,然後無論批處理隊列是否已滿,它們都會送出事務
3) 第三點雲契約細則:
現在,由於這是一家云提供商,請檢查細則。您所指的事務類型將涉及主機匯流排上的大量事務。大多數提供商現在限制每個 VM 的匯流排使用率,但他們並沒有準確地宣傳它(您會發現 gt/s 的限制)。因此,當數據到達時,將其從網路介面通過匯流排傳輸到您的虛擬機 RAM 會產生巨大的影響(請記住,您的虛擬機在資源上不匹配,因此它們不會獲得相同的份額,因此很簡單網路工作量不同)。您受到限制的一個很好的指標是擁有 1G 連接,嘗試在本地無負載傳輸大型二進制連續文件,並且永遠無法達到 50~60 MB/s (450-480 Mbps)
無論如何希望有幫助