<b>1.2 性能調查概要</b>
<b></b>
本節列出了開始性能調查時的幾個重要步驟。由于終極目标是解決問題,是以最好的方法是在你接觸性能工具之前就開始研究問題。遵循如下特定步驟是解決問題的有效方法,并且不會浪費寶貴的時間。
1.2.1 找到名額、基線和目标
性能調查的第一步就是确定目前的性能,并明确其應提升的程度。如果你的系統明顯性能不佳,你就可以确定值得花時間進行研究。但是,如果系統性能接近其峰值,那麼就不值得研究。明确性能峰值有助于你設定合理的性能期望值,并能給你一個性能目标,這樣你就知道何時應該停止優化。你可能總是沒有目标地時不時對系統做一點調整,這會浪費大量的時間,隻為得到一些額外的性能,即使你可能并不真的需要它們。
1.2.1.1 确定名額
要想知道什麼時候結束優化,你必須為系統自行确立或是使用已釋出的名額。名額是一種客觀的度量,用于訓示系統的執行情況。例如,如果你要優化一個web伺服器,你就可以選擇“每秒服務的web請求數”。如果你沒有一個客觀的途徑來度量性能,那麼在調整系統的時候,你幾乎無法确定是否取得了進展。
1.2.1.2 确定基線
在你明确了如何度量特定系統或應用程式的性能之後,确定目前的性能等級就很重要了。在調整和優化之前,運作應用程式并記錄其性能,這就是基線值,它是性能調查的起點。
1.2.1.3 确定目标
在你确定了性能名額和基線後,現在需要确定一個目标,這個目标引導你完成性能追蹤。你可以無限期地調整系統,花費越來越多的時間來獲得更加好一點的性能。如果你制定了目标,那麼你就會知道什麼時候該結束整個過程。要選擇合理的目标,下面是一些好的起點:
尋找其他有相同配置的人,詢問他們的性能名額—這是理想狀态。如果你能發現某人擁有相似的系統和更好的性能,則不僅能為你的系統標明目标,還能與這個人一起工作:他可以确定為什麼你的配置更慢,以及該配置有何不同。在研究問題時,使用另一個系統作為參照被證明是非常有用的。
查找工業标準測試程式的結果—許多網站都比較了計算機系統各方面的基準測試結果。有些基準測試結果是經過異常的努力得到的,是以,它們可能不能代表真實的使用情況。不過,很多基準測試網站給出了特定結果使用的配置,這些配置資訊可以為你調整系統提供線索。
在不同的os或應用程式上使用你的硬體—可能要在你的系統上運作不同的軟體以實作相似的功能。比如,如果你有兩個不同的web伺服器,其中一個運作較慢,那麼就試試另一個,看它的性能是否好一些。或者,在另一個不同的作業系統上運作同一個應用程式。如果上述任一情況下系統執行表現得更好一些,那麼,你就會知道原來的應用程式還有改進的空間。
如果用現有的性能資訊來指導你的目标,那麼你有更好的機會來選擇一個積極的,但也并非不可能達到的目标。
抓住低處的果實
性能追蹤的另一種方法是選擇在特定時間段内進行追蹤,而不是選擇一個目标,在這段時間内盡可能地對性能進行優化。如果應用程式從未被優化過,那麼通常在給定工作負載下,會有一些問題相對容易解決。這些容易被修複的問題稱為“低處的果實”。
為什麼是“低處的果實”?打個比方,将性能調查想象成你餓了,正站在一棵蘋果樹下。你會采摘最靠近地面,也是你最容易夠到的蘋果。這些低處的蘋果與果樹稍高處較難夠到的蘋果一樣能夠填飽你的肚子,但是采摘它們隻需花費很少的力氣。相似的,如果你要在有限的時間内優化一個應用程式,你可能會試着修複那些最簡單明顯的問題(低處的果實),而不是做一些更困難的、根本性的變化。
1.2.2 追蹤近似問題
使用性能工具為确定問題原因打開第一個口子。通過初始的粗略嘗試,你能對問題形成大緻的看法。這個簡單切口的目的就是收集足夠的資訊傳遞給程式的其他使用者和開發者,以便他們提出意見和建議。這裡非常重要的一點是要有良好的書面記錄來解釋你認為問題是怎樣的,以及什麼樣的測試使你得出了這個結論。
1.2.3 檢視問題是否早已解決
你的下一個目标是确定是否有其他人已經解決了這個問題。性能調查可能是一個冗長且費時的事情,如果你正好可以利用其他人的工作,那麼在你開始之前就将搶占先機。因為你的目的就是要改進系統性能,是以解決性能問題最好的辦法就是依靠其他人已有的成果。
盡管你很可能對性能問題的具體建議持保留态度,但是這些建議具有啟發性,可以使你了解到其他人可能已經研究過相似的問題,他們是如何試着解決問題的,以及他們是否成功了。
下述這些地方也能尋求性能建議:
在web上查找相似的錯誤資訊/問題—這通常是我調查的第一步。web搜尋常常會揭示很多與應用程式以及你正在查找的具體錯誤情況相關的資訊。它們還可以指向其他使用者所嘗試的系統優化,還可能提示哪些有作用、哪些沒有作用。成功的搜尋可以産生好幾頁能夠直接用于你的性能問題的資訊。要發現有相似性能問題的人,使用google或google論壇搜尋是非常有用的方法。
在應用程式郵件清單上求助—大多數流行或公開開發的軟體都有軟體使用者的郵件清單,這是尋找性能問題答案的絕佳地方。讀者和貢獻者通常在軟體運作以及保持其性能良好方面有經驗。搜尋一下郵件清單的存檔,因為有人可能會問過相同的問題。而随後對原始消息的回複也許就描述了一個解決方案。如果沒有這樣的回複,就向最初提出這個問題的人發郵件,詢問他是否找到了解決方法。如果這樣也不行,或是沒有其他人提出過相似的問題,那麼在清單上發郵件說明你的問題,幸運的話,也許已經有人把這個問題解決了。
向開發人員發郵件—很多linux軟體在文檔的某個位置包含了開發者的e-mail位址,如果在網際網路和郵件清單中搜尋失敗,你可以嘗試直接給開發者發郵件。開發人員通常非常忙,不見得有時間回複郵件。但是,相比其他人,他們更加了解軟體,如果你能向開發者提供對性能問題條理清晰的分析,并願意和他一起工作,那麼開發者也許能幫助你。雖然開發者關于性能問題原因的想法不見得正确,但是他們可能會給你指出一個富有成果的方向。
與内部開發人員交談—最後,如果産品是内部開發的,你就可以與内部開發人員通電話或發郵件。這和與外部開發者聯系幾乎是一樣的,隻不過内部人員可能會在你的問題上投入更多時間,或是給你指出内部的知識庫。
依靠其他人的工作,你也許在性能調查開始之前就能解決問題。至少,你有可能找到一些有希望的方法來調查,是以,最好總是看看别人有什麼發現。
1.2.4 項目開始(啟動調查)
現在你已經詳細了解了别人解決問題的可能性,接下來必須開始性能調查了。後續章節将詳細介紹工具和方法,但是現在還有一些提示能讓你的工作效果更好:
分離問題—如果可能的話,删去任何運作于被調查系統的多餘的程式或應用。運作許多不同應用程式的系統,其負載較重,會影響性能工具收集資訊的準确性,并最終将你引導到錯誤的方向。
利用系統差異發現原因—如果你能發現一個相似的系統具有更好的性能,那麼這對問題調試将是一個有力的幫助。使用性能工具的問題之一就是,你不一定有好的方法知道性能工具的結果是否指明了問題。如果你有一個好的系統和一個差的系統,你就可以在這兩個系統上運作同樣的性能工具,并比較它們的結果。如果結果不同,就可以通過找出系統差異來确定問題的原因。
一次隻改變一件事—這點非常重要。要真正确定問題出在哪兒,一次隻能有一個變化。這可能會很花時間,并讓你運作多個不同的測試,但它的确是發現你是否解決了問題的唯一途徑。
始終在優化後重新測量—如果你稍稍調整了系統,那麼在調整後對所有的事情重新進行測量是很重要的。當你開始修改系統配置時,所有之前生成的性能資訊可能不再有效。通常,在你解決一個性能問題時,别的問題會随之而來。新問題可能與老問題有着極大的不同,是以,你真的需要重新運作性能工具來確定正在調查的問題沒有出錯。
遵循這些建議能幫助你避免誤導,并有助于确定性能問題的原因。
1.2.5 記錄,記錄,記錄
如前所述,記錄你所做的事情以便之後回顧和審查,這一點确實很重要。如果你已經開始追蹤性能問題,那麼在你的腦海中就會有大量新增的筆記和url。它們可能雜亂無章,混成一團,但現在你明白它們的意思,知道它們的組織結構。在解決問題後,花些時間重寫你的發現以及為什麼你認為這麼做是對的。包括測量得到的性能結果和做過的實驗。雖然看上去工作量很大,但卻是非常值得的。幾個月後,曾經做過的測試很容易就會被忘記,如果沒有将結果記錄下來,最終你可能會重做測試。如果在這些測試還記憶猶新時撰寫了報告,你就不用重做這些工作,而隻需要依靠這些記錄就行。