【性能優化】(1)概述

性能優化概述


2019-07-21  09:49:25  by沖沖php

 

1. 理解性能優化

計算機的體系結構主要包括三部分:硬件、操做系統、應用程序。其中,硬件有CPU、內存、硬盤等;操做系統有進程、虛擬內存、文件系統、內核等;應用程序有Apache、MySQL、Nginx、Memcahed等。前端

性能調優就是對計算機硬件、操做系統和應用程序有至關深刻的瞭解,調節三者之間的關係,實現整個系統(包括硬件、操做系統、應用程序)的性能最大化,並能不斷的知足現有的業務需求。mysql

性能優化一般着重考慮對操做系統和應用程序的調優。ios

 

2. 硬件調優

(1)不管是租用服務器仍是夠買服務器,都須要選擇服務器的硬件配置。選擇依據主要是服務器的應用類型,也就是服務器的業務需求。算法

  • 負載均衡:性能要求相對較低,由於只負責轉發數據。注意配置一性能突出的網卡。(推薦配置:CPU E5620 x 一、內存 8G、硬盤 500G(RAID5))
  • Web 服務器:只處理一些靜態頁面或者圖片等,要求不是很高,主流的服務器均可以。(推薦配置:CPU E5620 x 一、內存 16G、硬盤 500G(RAID5))
  • 應用服務器:承擔網站功能的實現,在架構中佔較重的位置,特別是網站架構中只有一臺應用服務器,對CPU、內存、磁盤要求都比較高。(推薦配置:CPU E5620 x 2 內存 32G 硬盤 500G(RAID10))
  • 緩存服務器:分爲前端頁面緩存與後面數據緩存,典型應用分別是Varnish與Memcached,對內存的要求比較大,注意配置較大的內存。(推薦配置:CPU E5620 x 1 內存 32G 硬盤 500G(RAID10))
  • 數據庫服務器:對CPU、內存、磁盤的要求都很高,某部分的短板都會帶來性能問題。(推薦配置:CPU E5620 x 2 內存 64G 固態硬盤 500G(RAID10))
  • 備份服務器:要求不高,注意配置足夠大的硬盤空間。(推薦配置:CPU E5620 x 1 內存 4G 硬盤 2TB(RAID5))
  • 監控服務器:要求不高,普通的PC服務器就能夠。(推薦配置:CPU E5620 x 1 內存 4G 硬盤 500(RAID5))
  • 其它服務器:具體須要,具體分析。

(2)硬件的性能調優主要包括兩方面:sql

  • 上線前(硬件選型):節約成本的前提下把錢花在刀刃上。要求選擇合適的硬件配置,這是網站開始構建架構或者項目實施首先要解決的問題。
  • 上線後(硬件擴展)

 

3. 操做系統調優

① 參數調優:《Linux Performance Tuning》(Linux 性能調優)指出,廠商發佈的OS,經過保守的默認配置,可以兼容市場絕大部分計算機。可是你能夠調節OS的配置參數來得到更高的性能,好比你有個高性能的磁盤,可是若是你的操做系統中一些選項參數默認沒有啓動的話,就不能實現這些高級功能來提升硬盤性能。數據庫

  • 操做系統安裝優化
  • 系統初始化
  • 進程調優
  • 內存調優
  • IO 調優
  • 文件系統調優
  • 網絡調化

② 版本選擇:RedHat、CentOS等操做系統在項目實施或網站架構中較多使用,它們是針對企業級應用而開發的操做系統。而Ubuntu之類的操做系統對桌面支持得比較好,因此選擇發行版本時得注意(通常企業中用的比較多的是CentOS)。再有就是咱們通常不要選擇最新的發行版,由於剛出來的發行版相對來講bug還比較多,不要先當「小白鼠」了。好比:剛剛出來CentOS 7 等過一段時間穩定了再使用,目前咱們能夠選擇 CentOS 6.4 或 6.5便可。可是新版本也有不少好處,新版本中加入了不少新功能,去掉許多已知bug,對於一些不重要的應用,可嘗試使用新的操做系統。緩存

 

4. 應用程序調優

應用程序的調優對象一般是Apache、Nginx、MySQL。性能優化

(1)MySQL的調優服務器

  • MySQL 編譯安裝優化
  • MySQL 配置文件優化
  • 索引優化
  • MySQL 引擎優化
  • 查詢緩存優化
  • SQL 語句優化
  • 優化表類型(MyISAM或InnoDB)
  • 鎖機制優化
  • MySQL 服務器優化(換SSD)

 

5. 程序代碼調優

① Buffer:緩解應用系統上下層組件之間的性能差別,好比一般的 IO Buffer。
② Cache:一般用於讀多寫少的狀況,也是用來緩解應用系統上下層組件之間的性能差別。好比,應用 local cache,Memcached/Redis。
③ Batch:網絡或磁盤裏的批量操做,經過合併小任務或小請求爲大任務大請求,來提高數據傳輸效率低。好比 TCP 中的 nagle 算法,就是經過合併多個小分組來提高網絡傳輸效率的。
④ Pool:經過減小對象建立,鏈接創建的開銷來提高性能。好比線程池,鏈接池,對象池。
⑤ Concurrency:經過將串行改成並行,能過有效的下降系統延時。在多核系統中,並行處理才能提高 CPU 使用率。
⑥ Lock Less:多線程訪問共享資源時,一般須要加鎖。重量級的鎖每每引發線程切換,而線程切換很是耗時。那麼能夠經過優化鎖的使用來提高性能,優化鎖有兩種方法:
A. 經過減少鎖的粒度,分離競爭點來減小競爭。好比 Java 裏 HashTable 中鎖的粒度是整個對象,ConcurrentHashMap 中鎖的粒度只是一個 Segment。
B. 在競爭較少的狀況下,使用輕量級鎖來代替重量級鎖,減小線程切換帶來的性能消耗,好比自旋鎖代替互斥鎖。

 

6. 流程調優

性能優化是一個團隊的事情。項目的開發流程主要是:

  • 運營部門提出需求
  • 產品部門整理需求
  • 開發部門開發具體的業務應用
  • 運維部門搭建開發環境
  • 測試(QA)部門進行項目測試
  • 運維部門進行項目上線
  • 監控部門進行項目監控

一個項目(業務)存在性能問題,不會只是運維部門須要性能調優而是全部部門一塊兒解決該性能問題。由於須要調優的地方可能出如今產品,也可能出如今程序上(*.php),也多是業務須要自己就有問題,也多是運維的環境搭建有問題。但參加性能調優的更多的是開發、運維、測試和監控。

 

7. 怎樣進行性能調優?

(1)性能調優的時期

  • 上線前(基本優化):①準備硬件服務器、安裝操做系統、搭建開發環境。②開發出項目。③性能調優。
  • 上線後(持續優化):對上線後的項目進行性能監控(包括服務器性能監控和服務性能監控) 。

(2)性能調優的具體步驟

  • 性能指標 –> 確認衡量標準
  • 性能測試 –> 驗證性能指標
  • 性能分析 –> 找出性能瓶頸
  • 性能調優 –> 解決性能問題
  • 性能監控 –> 檢驗調優效果

① 性能指標

  • 吞吐量 –> 是單位時間內完成的用戶或系統的請求數量。
  • 併發數 –> 同時能接受多少用戶的訪問請求。
  • 響應時間 –> 用戶發出請求到收到響應的時間間隔。

② 性能測試

③ 性能分析

使用監控工具爲性能調優提供數據,找出瓶頸。

硬件:

  • 用vmstat、sar、iostat檢測是不是CPU瓶頸
  • 用free、vmstat檢測是不是內存瓶頸
  • 用iostat檢測是不是磁盤I/O瓶頸
  • 用netstat檢測是不是網絡帶寬瓶

操做系統:

  • 進程
  • 文件系統
  • SWAP 分區
  • 內核參數調整

應用程序(MySQL):

  • mysqlreport 性能分析報告
  • mysqlsla 慢查詢日誌分析

④ 性能調優

  • 肯定調優目標
  • 具體調優步驟
  • 檢測調優結果

A, 肯定調優目標。首先,跟上司明確性能提高的數值(10%、20%、或者更大)。而後,各部門各司其職。一般填補開發部門的代碼坑(例如優化SQL查詢),性能的提高效率遠高於優化OS。

B. 具體調優步驟:

  • 若是你不懂系統的參數,你千萬不要對系統的參數進行隨意的改動,否則你會後悔。
  • 每次只對一種系統資源進行系統調試,如CPU、或內存、磁盤。
  • 每次改動儘可能少的參數設置,推薦每次修改一個設置。
  • 分析一項系統資源時,使用多種工具,每每有意想不到的結果。
  • 不及勝於過之(寧願少作一點,不要作過頭了,性能已達到要求就不要隨意亂動,作好你的監控)。

C. 檢測調優結果。每次性能調優後必須對性能進程檢測,如Web服務器的ab工具,就是一個很好的檢測工具,每次調優後都能看到具體的變化。

⑤ 性能監控

A. 服務器性能監控

  • CPU 使用率
  • CPU 負載
  • 內存使用率
  • 磁盤I/O
  • 網絡流量
  • 磁盤空間
  • 系統進程

B. 服務性能監控(MySQL)

  • MySQL查詢吞吐率,包括Change DB、Select、Insert、Update、Delete
  • MySQL持久鏈接利用率
  • MySQL查詢緩存空間使用率
  • MySQL查詢緩存命中率
  • MySQL緩存查詢數
  • MySQL索引緩存命中率
  • MySQL索引讀取統計
  • MySQL鏈接吞吐率
  • MySQL鏈接緩存命中率
  • MySQL併發鏈接數,包括最大容許鏈接數、實際最大鏈接數、當前鏈接數、活躍鏈接數、緩存鏈接數
  • MySQL流量統計
  • MySQL表統計鎖定

 

參考:

https://blog.csdn.net/zenglinhua1/article/details/79047514

https://blog.csdn.net/hustspy1990/article/details/77834550

相關文章
相關標籤/搜索