歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

Oracle在Solaris下的性能與調整簡介

當一個系統運行緩慢性能下降的時候,很難知道原因是什麼。是內存洩漏,磁盤子系統瓶頸,還是某個特定應用程序在可擴展性方面有限制?有一些途徑可以發現和了解引起性能問題的根源,並且有可能消除它。

本文給出了從哪裡入手的一些建議。文中介紹了如何著手性能方面的考慮以及如何定位常見的性能瓶頸,還介紹了與性能密切相關一些概念,比如私有的共享內存(ISM-IntimateSharedMemory)與優先內存頁面調度。文章重點是放在Solaris2.6操作環境下。

著手性能問題

性能,或許比計算機系統其它方面的行為更需要有通盤的考慮。為了識別來自一個或多個組件的問題根源,必須要采取結構化的方法。

實際的結果是,解決性能問題過程中最重要的一個部分是定義你正在試圖解決的問題。從實際應用的方面來講,這意味著定義一個操作或者測試用例,從而可以:

A)知道系統當前有多快。

B)知道系統需要快"X"倍;或者知道系統曾經在不同環境下快過"X"倍。

設置基線是開始的第一步。性能分析是由簡單明確地定義所需解決的問題開始的自上而下的一個過程。如果你想要一個系統運行得快一些,你仍然需要定義這個系統的哪些屬性是你想要改進的,以及哪些代價是你可以接受或者不可以接受的。除非你能夠明確地描述出問題症狀/機會,想要識別出問題的根源只會是碰運氣。

性能分析很象是偵探工作,我們通過證據和觀察建立事實依據,非常小心不要陷入預先想象的與事實不符的結論中——只有在具備非常壓倒性的證據時才確認猜想。

對所有假設都要懷疑。其他人聲稱的事實實際上只是個可能正確也可能不正確的假設。如果這個假設是錯誤的,你可能會是在不正確的依據下工作,從而得出不正確的結論。

這裡有一些警告。Solaris操作環境在大多數情形下對於工作負荷的自我性能優化都是很好的。發行版本越新,需要手工做的性能優化就越少。性能問題的根源經常被發現是因為一個試圖優化性能的行為引起的。首先需要注意應用程序,最後才是操作環境。

任何對系統配置的更改,比如象內存大小和磁盤布局這樣的性能設置,都應該檢查其當前的正確性。同樣,一個帶參數的系統升級也有可能對新操作環境的性能帶來影響。

性能監測

1.從暴露出來的問題開始

什麼操作使你看到性能問題的症狀?

比如說,是特定類型的數據庫查詢,文件或網絡操作比你期望的慢?在給出測試用例方面你能把操作步驟做到多具體,例如一個SQL查詢或者30行的C程序?

最大程度利用你的知識盡可能准確地說明“什麼地方出了什麼問題”以定義你的問題。良好的問題說明的例子就像這樣:

一個SQL查詢在VXFS上比在UFS上要花兩倍的時間。

SVR4消息隊列操作在操作環境版本A上比在操作環境版本B上要多花百分之30的時間。

登錄進系統A比登錄進系統Y多花三倍的時間。

一個問題說明不應該包括解決方法或者是可能的解決方法。

在大部分的時候,對問題有一個清晰的說明就意味著完成了解決問題過程的一大半了。在對你試圖解決的問題進行說明的時候考慮到用戶觀點的因素也很重要,這意味著要從應用程序的角度來看。這和人們的天性相反,人們總是通過實驗試圖去證明或者證偽一個可能的原因,而不是依據觀察得到的事實來評估一個原因的可能性程度。

不恰當的問題說明就象這樣:

mpstat的"wt"列表明等待時間過多。

用戶任務花時間太長。

一個系統和它的應用程序的功能正確性問題與性能問題之間的邊界往往是一個灰色地帶。整個系統掛起與進程掛起的問題不在本文討論范圍之內。如果你懷疑系統的功能不正確,而不是性能問題,那麼給你的SUN解決方案中心打電話以找到一個解決問題的方法。高性能系統的前提是它的功能首先要正確。

作為你積極的維護計劃的一部分,檢查/var/adm/messages中有沒有比如磁盤重試之類的硬件問題或者有沒有額外的消息產生也是很有價值的。

察看系統的歷史信息也非常有價值;如果你的系統曾經有過更好的性能,畫一條時間曲線詳細記錄何時第一次發現性能變差以及從什麼時候開始性能一直很差。

2.知道你的系統在正常情況下會怎樣

保存你的系統是如何正常運轉的樣例是一個好主意。你可以很容易地收集和保存每月的性能數據,比如:

*stat類:vmstat,mpstat,iostat,vxstat,sar

ps的輸出以顯示哪些進程在運行(在Solaris8操作環境下是prstat)。另外,有不少商業的和無支持的產品都可以用來做性能監測。一個免費的無支持的可選產品是SEToolkit(要獲得其各種版本的信息,請看SunPerformanceSEToolkitpage)。SEToolkit報告磁盤活動、CPU利用情況、TCP和網絡連接、內存,以及其他更多信息。在我們的經驗裡,它安裝方便,不需要重啟系統,並且生成容易理解的圖形顯示。

很多這類產品都存在一個共同的問題,就是對不同的硬件配置有不同的門限值。例如,特定的門限值對於400-MHz的系統可能顯得太過,會讓這個系統慢得象是在爬一樣,但是對於一個900-MHz的系統卻可能是可以接受的。

3.尋找性能瓶頸

一旦你已經定義了需要解決的性能問題,下一步驟就是縮小范圍到瓶頸產生的地方。

這個階段有必要問這樣一些問題:

應用程序能告訴我它看到哪些是瓶頸?拿Oracle作例子,一個Oracle數據庫管理員應該知道BSTAT/ESTATS是什麼以及如何運行和理解它們。還是那句話,從應用程序的角度來看問題,BSTATS/ESTATS可以顯示限制了Oralce性能的瓶頸,這可以作為進一步分析的指導。

大部分的時間花在哪裡,是內核還是用戶進程?通過vmstat、mpstat、sar、ps、prstat可以回答這個問題。

具有相近類型的所有資源是否同樣繁忙?這個問題的意義在於尋找資源的不平等分布。比如,一個磁盤可能是瓶頸所在,或者一個CPU會比其他CPU更忙。對CPU,看mpstat。對磁盤,用iostat。哪個或哪些進程在使用最多的資源?用這些命令可以看到使用CPU和內存最多的進程:

ps-eopid,pcpu,args|sort+1n

CPU百分比:

ps-eopid,vsz,args|sort+1n

K字節的虛擬內存:

/usr/ucb/psaux|more

輸出被排序,使用CPU和內存最多的進程排在上面。

Solaris8操作環境提供了prstat,它給出CPU和內存使用情況的一個動態注解。prstat-cvm的輸出結果非常有用。

我們現在來看看怎用使常見的Solaris命令來開始性能分析。

vmstat命令是簡單的。這裡我們可以看到一個對於正在執行的應用程序,CPU能力不足的例子。

%vmstat15

procsmemorypagediskfaultscpu

rbwswapfreeremfpipofrdesrm0m1m2m3insycsussyid

450028872161821043707449645508026101531579798361309

580028313124640859835825632110492000014134797102769310

550028309445606426496563806012100001441462798969310

5700282770448760481872368000121001016064316116066340

560028247124751268576045617360261001015844939108668320

580028134004705678566733323740355000016765112111470300

6010281671249464786172067310110703023296131106764360

5800281755248392458552109960146000013576724105971290

vmstat輸出的第一行總是可以忽略。在"procs"下面標著"r"的一列是等待獲得CPU的進程運行隊列中的進程數。"id"列是CPU空閒時間。這台機器沒有足夠的CPU資源以滿足進程運行的需要,這可以從它的大部分CPU時間花在用戶空間裡看出來(看"us"列)。

這裡有兩種辦法可供采用——第一,增加更多的CPU,或者第二,對應用程序的代碼作性能分析看看是不是應用程序的某部分可以優化。對代碼片斷作優化可能會需要非常大量的努力——而且有時候收到的效果很少。在關系到時間的時候,最好在考慮你可能的“投資回報”時現實一點。

Copyright © Linux教程網 All Rights Reserved