性能的基本概念
一)、什么叫程序的性能?
程序運行所需的內存和時間。
二)、性能的表現形式:
1).執行速度: 程序的反應是否迅速,響應時間是否足夠短。
2).啟動時間:程序從運行到可以處理正常業務所需要的時間。
3).內存分配: 內存分配是否合理,是否過多的消耗內存或者存在泄露
4).負載承受能力: 當系統壓力上升時,系統的執行速度、響應時間的上升曲線是否平緩。
三)、衡量性能的基本指標:
1).執行時間:一段代碼從開始到結束所需的時間。
2).CPU時間:函數或線程占用CPU的時間。
3).內存分配:程序在運行時所占用內存的空間。
4).磁盤吞吐量:磁盤I/O的使用情況。
5).網絡吞吐量:網絡的使用情況。
6).響應時間:系統對某用戶行為或者事件作出響應的時間。
四)、木桶原理
什么叫木桶原理?
一個木桶能乘多少水不取決於最高的那塊木板,而取決於最短那一塊。
一個系統的總體性能不取決於系統性能表現最好的組件,而取決於性能表現最差的組件。
五)、什么叫性能瓶頸?
木桶中最短的那一個木板,影響系統的總體性能,系統性能表現最差的組件。
六)、系統的性能瓶頸類型:
根據應用的特點不同,任何計算機資源都有可能成為系統瓶頸。
七)、可能成為系統瓶頸的計算資源:
1).磁盤I/O: 讀寫速度慢。
2).網絡操作: 網絡環境的不確定性,會導致網絡操作速度慢。
3).CPU: 對資源要求較高的應用,長時間、大量的占用資源,對CPU的爭奪也會導致性能問題。
4).異常: 異常的捕獲和處理非常消耗資源。
5).數據庫: 海量數據的讀寫操作相當費時。
6).鎖競爭: 鎖競爭會明顯增加線程上下文的開銷。
7).內存: 內存大小不足,應用程序只能盡可能的將常用的核心數據讀入內存。
八)、Amdahl(阿姆達爾)定律
參考:https://blog.csdn.net/thinkpad_zj/article/details/80240787
定義了加速比與系統並行度和處理器數量的關系
加速比:
加速比 = 1 / ( 串行化比重 + (並行化比重 / cpu數量))
加速比越高,程序性能優化越好。
程序性能優化效果取決於串行化比重和cpu數量,串行化比重越低,CPU數量越多,則優化效果越好。
串行: 只能一個人去做這件事
例如:燒開水,燒一壺開水 ,水開時間要2分鍾,你增加多幾個人在那里燒,但開水開的時間是不可變的。
並行: 可以多個人去干這件事
例如:掃地,一個人需要2分鍾,多加一個人要1分鍾,人越多掃地用時越短
九)、性能調優
性能調優的分類:
1).設計調優: 在軟件開發前執行,評估系統的潛在問題,規避某一組件的執行問題
2).代碼調優: 在軟件開發過程中,在軟件開發完成后,在軟件維護過程中對程序代碼進行改進和優化
要求:熟悉相關的語言的API, 對算法,數據結構靈活運用
3).JVM調優: 系統運行期, 設置合理的JVM啟動參數
JVM是java軟件的運行平台,JVM的各項參數會直接影響java程序的性能。例如:JVM堆的大小、
垃圾回收策略
要求:了解JVM的運行原理和基本內存結構。
4).數據庫調優:
4.1 、在應用層對sql語句進行優化
例:在對大量擁有相同結構的查詢使用PrepareStatement,不使用statement
在使用select查詢時,避免使用星號
4.2、對數據庫進行優化
建立具有良好表結構的數據庫
例:使用表分區技術,建立索引
4.3、對數據庫軟件進行優化
例:設置合理大小的共享池、緩存緩沖區
5).操作系統調優
十)、性能優化的步驟
確立性能目標 -----》 對軟件進行性能測試 -------- 》若未達到性能目標 ------- 》找出系統瓶頸並改進 ----- 》繼續測試 ----- 》直至達到所需的性能目標