原文連接配接:http://apmblog.compuware.com/2013/06/04/how-to-accurately-identify-impact-of-system-issues-on-end-user-response-time/
以下為正文
我們希望檢測下我們社群網站的負載能力,是以我們開發團隊進行了一個任務,驗證生産環境的系統是否能在現有的硬體基礎上處理10倍于目前的負載。為了将網站在高負載下可能的崩潰影響降到最低,我們決定在周日下午進行第一輪測試。在運作測試之前,我們給運維團隊提了一個醒:他們可能在這次兩小時的期間觀察到明顯的負載變化,進而可能影響到運作在同一環境下的其他應用程式。
在測試過程中,運維團隊和開發團隊一起監控實時性能資料,當達到一定的負載水準後,我們看到最終使用者的響應時間和耗盡資源。在本次測試中非常有趣的是,開發團隊和運維團隊都看着相同的資料,但是卻從不同的角度去審視這些結果。然而,他們都是依賴于最近才公布的compuware的purestack技術,這是——整合dynatrace和purepath——的第一個解決方案,顯示出在高負載下生産環境的硬體是如何影響到關鍵業務應用程式的性能。
上下文為運維團隊和開發團隊的資料之間架起橋梁:這張圖檔顯示"橫向"事務以及"縱向"層面的熱點區域(bridgingthegapbetweenopsandappsdatabyaddingcontext:onepicturethatshowsthehotspotsof"horizontal"transactionaswellasthe"vertical"stack.)。
在我們的場景中表現不佳的根本原因-一個運作着web和應用程式服務的主伺服器的cpu被耗盡-進而導緻達不到我們的負載目标。事實證明,這個問題是跟硬體裝置和應用程式都有關系(thisturnedouttobebothanitprovisioningandanapplicationproblem)。讓我解釋一下團隊的步驟以及他們是如何得出他們的行動項清單,以便改善目前的系統性能,以便在第二輪測試中得到更好的結果。
第1步:監控和識别硬體健康狀況
運維團隊希望能夠看着他們的伺服器清單,而所有關鍵名額(cpu,記憶體,網絡,磁盤等)都能很快地呈現出綠色狀态(operationsteamslikehavingtheabilitytolookattheirlistofserversandquicklyseethatallcriticalindicators(cpu,memory,network,disk,etc)aregreen)。但是,當我們的負載測試達到了頂峰時,他們看向伺服器的狀态時,顯示出來卻是,他們有2台機器正出現了異常:
我們的社群網站核心伺服器出現cpu相關的問題,并影響到另一運作在這台伺服器上的應用程式。
步驟2:哪些運作中的應用程式被真正影響到了?
單擊受影響的程式頁籤,它會顯示受影響的機器上所有運作的應用程式,以及目前受影響的應用程式:
增加的負載不僅影響到社群網站,而且也影響到我們支援網站
當兩個團隊孤立檢查,運維導向的監測是不會有這個的結論(whenexaminedindependently,operations-orientedmonitoringwouldnotbethattelling.)。但是,當它被放到具體的上下文中,并涉及到關聯的資料(最終使用者響應時間,使用者體驗,...),這對開發團隊來說是非常重要的,兩個團隊将獲得更多的靈感和視角。這是一個良好的開端,但仍然還有很多需要了解的。
步驟3:哪些關鍵事務被真正影響到了?
點選社群應用程式的連結,它會顯示實際受硬體狀态影響的事務和頁面,但仍然存在着兩個關鍵的卻又懸而未決的問題:
這些事務,是否是我們成功運作的關鍵?
這些事務和個人使用者受性能問題影響後,有多嚴重的後果?
自動基線告訴我們,社群網站主要頁面的響應時間受到明顯的的性能影響。也包括我們的首頁,這是我們最有價值的一個頁面。
步驟4:可視化受硬體問題影響的事務流
事務流圖表是一個令人滿意的方式,能使得運維團隊和開發團隊達到一個基本的共識,并根據其完整的上下文檢視關鍵的資料。它能顯示涉及到的應用層,正在運作的實體機器和虛拟機器,以及哪裡是熱點區域。
運維團隊和開發團隊有相同的概要圖表,告訴他們無論是在"橫向"事務和"縱向"層面的熱點區域。
我們知道,我們的網頁内容非常"豐富"(圖像,javascript和css),高達80%的事務時間花費在浏覽器上。看到熱點區域這樣的表現,現在整體頁面加載時間下降到50%,我們馬上就知道更多的事務時間已經轉移到新的熱點區域:伺服器端。好消息是,資料庫是沒有問題的(隻用了1%的響應時間),整個性能熱點區域似乎轉到web和應用程式伺服器,它們都運作在同一台機器上-即那台存在cpu問題的機器。
第5步:精确定位存在問題的機器的健康問題
點選主機健康圖表(hosthealthdashboard),它會顯示了那個特定的伺服器出了什麼問題:
運維團隊立即看到了cpu的消耗主要來自于一個java應用伺服器。網絡,磁盤和頁面錯誤在一些某些特定的時間也都存在不尋常的波動。
第6步:程序健康圖表顯示應用程式伺服器上響應緩慢
我們可以看到,這台機器上的兩個主要程序是iis(web伺服器)和tomcat(應用程式伺服器)。再進一步看看,随着時間的推移,他們具體的表現情況:
我們并不是沒有足夠的工作線程。傳輸速率是相當平緩。這就說明,web伺服器正在等待應用伺服器的響應。
它表明應用程式伺服器的cpu被耗盡。負載測試工具發送的持續請求在排隊等待,因為伺服器無法及時處理掉這些請求。實際上已處理的事務數量在下降。
第7步:精确定位cpu的大量消耗
現在我們開發團隊非常有興趣搞清楚到底是什麼在消耗着cpu,以及是否我們可以在應用程式代碼裡面修複,或者是否隻是我們需要更多的cpu:
熱點區域顯示應用程式的兩層都消耗cpu比較多。讓我們進一步深入。
<a href="http://www.51testing.com/batch.download.php?aid=42200" target="_blank"> 我們有些相當複雜的頁面(包含大量confluencemacros)導緻大量的cpu占用。</a>
缺少資源和身份驗證問題導緻了這些異常。
運維和開發團隊現在可以輕松地劃分處理硬體和應用程式問題的優先級
是以如前所述,上下文是關鍵。但這些資料不是輕而易舉就能獲得的-上下文依賴于智能關聯的能力,使所有相關的資料組成一個連貫的故事。當"橫向"的事務資料(最終使用者響應時間的分析)關聯到"縱向"的硬體層面資訊,這就很容易讓兩個團隊達到一個共識,并規劃影響最小的修複的優先級。
這次實驗使我們能夠确定以下幾個行動項:
當應用程式對其他程式造成負面影響時,部署我們的關鍵應用程式到其他的機器上。
優化我們的頁面生成方式,以便降低cpu使用率。
為虛拟機配置設定更多的cpu,以便能夠處理更多的負載。
最新内容請見作者的github頁:http://qaseven.github.io/