性能瓶頸分析方法

 同一場景

1.小用戶量的狀況下測試
2.大用戶量狀況下的測試
分析的方法:
整個系統架構分析,系統響應時間消耗,利用圖表分析
查看事務響應時間,經過事務摘要圖分析事務響應時間,哪一個消耗最大(經過小用戶量和大用戶量的響應時間分析,查看哪一個事務響應時間最高),肯定哪部分功能是性能的瓶頸,分析window resource圖表,查看cpu
使用下列計數器標識cpu瓶頸web

  •   Processor\ Interrupts/sec
  •   Processor\ % Processor Time
  •   Process(process)\ % Processor Time
  •   System\ Processor Queue Length

經過它來肯定是否硬件自己出現瓶頸,或者進一步肯定應該怎麼去判斷性能產生瓶頸的地方!
下一步去判斷進程,那個進程消耗cpu最高
下邊就有不少種狀況須要你本身去判斷,有多是進程調用了的函數消耗了系統資源造成上邊的問題,也有多是後臺數據庫出現的問題(這個就要看你的系統配置是什麼樣的,好比你的db服務器和應用服務器都配置在一臺機器上)
性能產生瓶頸有不少地方,因此須要進一判斷,是不是後臺數據庫的問題還有待分析,是那條語句致使的問題須要進一步分析判斷。
分析原則:
• 具體問題具體分析(這是因爲不一樣的應用系統,不一樣的測試目的,不一樣的性能關注點)
• 查找瓶頸時按如下順序,由易到難。
服務器硬件瓶頸-〉網絡瓶頸(對局域網,能夠不考慮)-〉服務器操做系統瓶頸(參數配置)-〉中間件瓶頸(參數配置,數據庫,web服務器等)-〉應用瓶頸(SQL語句、數據庫設計、業務邏輯、算法等)
注:以上過程並非每一個分析中都須要的,要根據測試目的和要求來肯定分析的深度。對一些要求低的,咱們分析到應用系統在未來大的負載壓力(併發用戶數、數據量)下,系統的硬件瓶頸在哪兒就夠了。算法

  • 分段排除法頗有效

分析的信息來源:數據庫

  • 根據場景運行過程當中的錯誤提示信息
  • 根據測試結果收集到的監控指標數據

一.錯誤提示分析緩存

分析實例:服務器

  • Error: Failed to connect to server 「10.10.10.30:8080″: [10060] Connection
  • Error: timed out Error: Server 「10.10.10.30″ has shut down the connection prematurely

分析:
A、應用服務死掉。
   (小用戶時:程序上的問題。程序上處理數據庫的問題)
B、應用服務沒有死
   (應用服務參數設置問題)
    例:在許多客戶端鏈接Weblogic應用服務器被拒絕,而在服務器端沒有錯誤顯示,則有多是Weblogic中的server元素的 AcceptBacklog屬性值設得太低。若是鏈接時收到      connection refused消息,說明應提升該值,每次增長25%
C、數據庫的鏈接
     (一、在應用服務的性能參數可能過小了 二、數據庫啓動的最大鏈接數(跟硬件的內存有關))網絡

  • Error: Page download timeout (120 seconds) has expired

分析:多是如下緣由形成
A、應用服務參數設置太大致使服務器的瓶頸
B、頁面中圖片太多
C、在程序處理表的時候檢查字段太大多架構


二.監控指標數據分析併發


1.最大併發用戶數:
應用系統在當前環境(硬件環境、網絡環境、軟件環境(參數配置))下能承受的最大併發用戶數。
在方案運行中,若是出現了大於3個用戶的業務操做失敗,或出現了服務器shutdown的狀況,則說明在當前環境下,系統承受不了當前併發用戶的負載壓力,那麼最大併發用戶數就是前一個沒有出現這種現象的併發用戶數。
若是測得的最大併發用戶數到達了性能要求,且各服務器資源狀況良好,業務操做響應時間也達到了用戶要求,那麼OK。不然,再根據各服務器的資源狀況和業務操做響應時間進一步分析緣由所在。
2.業務操做響應時間:
• 分析方案運行狀況應從平均事務響應時間圖和事務性能摘要圖開始。使用「事務性能摘要」圖,能夠肯定在方案執行期間響應時間過長的事務。
• 細分事務並分析每一個頁面組件的性能。查看過長的事務響應時間是由哪些頁面組件引發的?問題是否與網絡或服務器有關?
• 若是服務器耗時過長,請使用相應的服務器圖肯定有問題的服務器度量並查明服務器性能降低的緣由。若是網絡耗時過長,請使用「網絡監視器」圖肯定致使性能瓶頸的網絡問題
3.服務器資源監控指標:
內存:數據庫設計

  1. UNIX資源監控中指標內存頁交換速率(Paging rate),若是該值偶爾走高,代表當時有線程競爭內存。若是持續很高,則內存多是瓶頸。也多是內存訪問命中率低。
  2. Windows資源監控中,若是Process\Private Bytes計數器和Process\Working Set計數器的值在長時間內持續升高,同時Memory\Available bytes計數器的值持續下降,則極可能存在內存泄漏。

內存資源成爲系統性能的瓶頸的徵兆:函數

    • 很高的換頁率(high pageout rate);
    • 進程進入不活動狀態;
    • 交換區全部磁盤的活動次數可高;
    • 可高的全局系統CPU利用率;
    • 內存不夠出錯(out of memory errors)

處理器:

  1. UNIX資源監控(Windows操做系統同理)中指標CPU佔用率(CPU utilization),若是該值持續超過95%,代表瓶頸是CPU。能夠考慮增長一個處理器或換一個更快的處理器。若是服務器專用於SQL Server,可接受的最大上限是80-85%
  2. 合理使用的範圍在60%至70%。
  3. Windows資源監控中,若是System\Processor Queue Length大於2,而處理器利用率(Processor Time)一直很低,則存在着處理器阻塞。

CPU資源成爲系統性能的瓶頸的徵兆:

    • 很慢的響應時間(slow response time)
    • CPU空閒時間爲零(zero percent idle CPU)
    • 太高的用戶佔用CPU時間(high percent user CPU)
    • 太高的系統佔用CPU時間(high percent system CPU)
    • 長時間的有很長的運行進程隊列(large run queue size sustained over time)

磁盤I/O:

  1. UNIX資源監控(Windows操做系統同理)中指標磁盤交換率(Disk rate),若是該參數值一直很高,代表I/O有問題。可考慮更換更快的硬盤系統。
  2. Windows資源監控中,若是 Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec頁面讀取操做速率很低,則可能存在磁盤瓶徑。

I/O資源成爲系統性能的瓶頸的徵兆 :

    • 太高的磁盤利用率(high disk utilization)
    • 太長的磁盤等待隊列(large disk queue length)
    • 等待磁盤I/O的時間所佔的百分率過高(large percentage of time waiting for disk I/O)
    • 過高的物理I/O速率:large physical I/O rate(not sufficient in itself)
    • 太低的緩存命中率(low buffer cache hit ratio(not sufficient in itself))
    • 太長的運行進程隊列,但CPU卻空閒(large run queue with idle CPU)

4.數據庫服務器:


SQL Server數據庫:

  1. SQLServer資源監控中指標緩存點擊率(Cache Hit Ratio),該值越高越好。若是持續低於80%,應考慮增長內存。
  2. 若是Full Scans/sec(全表掃描/秒)計數器顯示的值比1或2高,則應分析你的查詢以肯定是否確實須要全表掃描,以及SQL查詢是否能夠被優化。
  3. Number of Deadlocks/sec(死鎖的數量/秒):死鎖對應用程序的可伸縮性很是有害,而且會致使惡劣的用戶體驗。該計數器的值必須爲0。
  4. Lock Requests/sec(鎖請求/秒),經過優化查詢來減小讀取次數,能夠減小該計數器的值。

Oracle數據庫:

  • 若是自由內存接近於0並且庫快存或數據字典快存的命中率小於0.90,那麼須要增長SHARED_POOL_SIZE的大小。

  快存(共享SQL區)和數據字典快存的命中率:

    select(sum(pins-reloads))/sum(pins) from v$librarycache;
    select(sum(gets-getmisses))/sum(gets) from v$rowcache;

  自由內存:

    select * from v$sgastat where name=’free memory’;

  • 若是數據的緩存命中率小於0.90,那麼須要加大DB_BLOCK_BUFFERS參數的值(單位:塊)。

  緩衝區高速緩存命中率:
    select name,value from v$sysstat where name in (‘db block gets’,‘consistent gets’,'physical reads’) ;

    Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))

  • 3 若是日誌緩衝區申請的值較大,則應加大LOG_BUFFER參數的值。 日誌緩衝區的申請狀況:

    select name,value from v$sysstat where name = ‘redo log space requests’ ;

  • 4 若是內存排序命中率小於0.95,則應加大SORT_AREA_SIZE以免磁盤排序。

    內存排序命中率:

相關文章
相關標籤/搜索