服務器的指標和瓶頸如何分析?

1、CPU

CPU 使用率(%processor time), 在 80%±5% 範圍內波動爲宜。過低,則服務器 CPU 利用率不高;過高,則 CPU 可能成爲系統的處理瓶頸。

CPU 隊列長度(processor queue length),隊列長度不要超過 CPU 內核的 2 倍。例如雙核 CPU,隊列長度不要超過 4 個。

判斷 CPU 瓶頸:

  1. %processor time 平均值大於 95

  2. processor queue length 大於 2 (大於處理器個數 + 1). 可以確定 CPU 瓶頸. 但若 %processtime 一直很低,則存在處理器阻塞。

  3. CPU 空閒時間爲零 (%idle Time)

  4. 過高的用戶佔用 CPU 時間 (%User Time)

  5. 過高的系統佔用 CPU 時間 (%Privileged Time:長期大於 90% 或者 95%)

備註:

1.%User time(processor_total) 表示耗費 CPU 的數據庫操作,如排序,執行 aggregatefunctions 等。如果該值很高,可考慮增加索引,儘量使用簡單的表聯接,水平分割大表格等方法來降低該值

  1. 如果 CPU 使用率不斷上升,內存使用率也不斷上升,表明系統可能產生資源爭用情況,引起原因,程序資源調配問題。

2、帶寬

每秒接收的數據量(Bytes received/sec ),應該低於服務器下行帶寬 / 8 較好。

每秒發送的數據量 (Bytes sent/sec) 應該低於服務器上行帶寬 / 8 較好

網絡瓶頸判斷:

1.bytes total/sec(network interface). 用這個數值和當前網絡帶寬比較,兩者相除結果應小於 50%

  1. 隨着負載的加大,點擊率和吞吐量會隨之增大。如果系統的吞吐量隨着負載的加大出現平坦或降低並且 CPU 的使用率很高, 並且此現象發生時切換水平 Contextswitch/sec(system) 在 15000 以上, 那麼意味着上下文切換次數過高,表明網絡飽和。

3、內存

可用內存(Available MBytes)。當這個數值變小時,表示 Windows 開始頻繁地調用磁盤頁面文件。如果這個數值很小,例如小於 5 MB,系統會將大部分時間消耗在操作頁面文件上。一般要保留 10% 的可用內存。最低不能 < 4M,此值過小可能是內存不足或內存泄漏。

內存的頁交換頻率(pages/sec), 即內存與虛擬內存(硬盤)交換的頻率。值越低越好,大致在 1 百以內。

內存不足 / 泄漏的現象:

1.private bytes(process) 計數器和 workingset(process) 計數器持續升高,同時 memory/availablebytes 值持續降低,表明內存泄漏。

2.Page write/sec(memory) 每秒執行的物理數據庫寫的頁數。

說明:如果服務器沒有足夠的內存處理其工作負荷,此數值將一直很高。如果大於 80,表示有問題 (太多的讀寫數據操作要訪問磁盤,可考慮增加內存或優化讀寫數據的算法)。 

4、磁盤 I/O

硬盤使用率(%Disk time),硬盤隊列長度 (Avg. Disk queue length). 這兩個值都是越低越好。

硬盤瓶頸分析:

1.%disk time 和 Avg.DiskQueue Length 的值很高,而 pagereads/sec(memory) 很低,則可能存在磁盤瓶頸; 若 pagereads/sec(memory) 並未降低,則是內存不足。

2.avg.disk sec/read,avg.disksec/write 大於 20ms, 則可能有磁盤瓶頸

3.Avg.Disk sec/Transer 磁盤中讀寫數據的平均時間,單位是秒。該值小於 15ms 最爲優異,介於 15-30ms 之間爲良好,30-60ms 之間爲可以接受,超過 60ms 則需要考慮更換硬盤或硬盤的 RAID 方式。

4.Disk Transfers/sec 指在此盤上讀取 / 寫入操作速率。正常值 <(DiskBytes/sec)/3,此值過大表示系統要求的 IO 速度已接近硬盤的最大速度,要更換更快的硬盤

5.Avg.disk queue length 該值應不超過磁盤數的 1.5~2 倍。要提高性能,可增加磁盤。注意:一個 RaidDisk 實際有多個磁盤。 

5、SQL Server 相關

  1. SQLServer:Buffer Manager ->Buffer cache Hit Ratio 顯示在高速緩存中找到數據的命中率。如果數值持續小於 85%, 則表示內存有問題。

  2. SQLServer:Locks->Lock Waits/sec 顯示在當前進程完成之前強制其他進程等待的每秒鎖定請求的數量。如果該值始終大於 0, 則表示事務有問題。

  3. SQLServer:Databases->Transactions/sec 每秒爲數據庫啓動的事務數

6、線程

線程主要消耗的是 CPU 的資源,在 CPU 可負擔的情況下,線程越多越好。一般是服務器能承受的最大線程的四分之三。

7、動態影響

三層架構 CSD,哪一層都可能成爲瓶頸,三者間的平衡點纔是系統的最大併發。

8、緩存

系統級性能調優時,重點利用緩存。現在 CPU,硬盤都自帶緩存,利用好這些緩存。代碼級調優,則主要是算法,sql 語句。儘量減少內存的使用,用好內存,減少運算次數。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/xBvxd1LrY-WSHr_hyscXLQ