看懂程序性能——性能的表現和各種指標


本篇文章是我閱讀葛一鳴的《java程序性能調優》第一章總結


 

一、評價性能的主要指標

  對於客戶端程序而言,拙劣的性能會嚴重影響用戶體驗。以web服務器為例,服務器的響應時間吞吐量是兩個重要的參數性能。當服務器承受巨大的訪問壓力的時候,可能會出現響應時間變長,吞吐量下降,甚至是拋出內存溢出異常而崩潰。

  一般來說,程序性能通過以下幾個方面來表現:

  • 執行速度:程序的反應是否迅速,響應時間是否足夠短
  • 內存分配:內存分配是否合理,是否過多的消耗內存和存在內存泄漏
  • 啟動時間:從程序啟動到能正常處理業務需要花費多少時間
  • 負載承受能力:當系統壓力上升時,系統的執行速度、響應時間的上升曲線是否平緩

     為了能夠科學的進行性能分析,對性能指標進行定量評測是非常重要的。主要的定量評測的性能指標有:

  • 執行時間:一段代碼從開始執行到運行結束的時間
  • cpu時間: 線程占用CPU的時間
  • 內存分配:程序運行時占用的內存空間
  • 磁盤吞吐量:描述I/O的使用情況
  • 響應時間:系統對用戶行為或者事件做出響應的時間。

二、性能瓶頸

  木桶原理大家都很清楚了,即決定一個木桶能裝多少水,不在於桶壁上的最高的木塊,而在於 桶壁上最短的那一塊。同理運用在系統性能優化上,如果一個系統用於足夠的CPU資源和內存資源,但是磁盤I/O性能底下,那么系統的性能取決於當前最慢的磁盤I/O速度,而不是內存和CPU。如果要提升系統性能,我們只能提升磁盤I/O的性能,優化CPU和內存是毫無必要的,因此磁盤I/O是系統的性能瓶頸。

最有可能成為系統瓶頸的計算資源如下:

  • 磁盤I/O  磁盤I/O的讀寫的速度要比內存慢很多
  • 網絡操作 與磁盤I/O類似,由於網絡環境的不穩定,可能網絡操作會更慢
  • CPU 對計算資源要求較高的應用,由於長時間,不間斷的占用占用CPU資源,那么對CPU的爭奪將導致性能問題。
  • 異常 java的異常捕獲和處理是十分消耗資源的。如果程序高頻率的進行異常處理,整體性能會有明顯下降
  • 數據庫  等待數據庫完成操作或者返回請求的結果集,緩慢的同步會成為系統瓶頸
  • 鎖競爭  對於高並發的程序來說,如果存在激烈的鎖競爭,會增加線程上下文切換的開銷,白白占用包括的CPU資源
  • 內存   內存大小不足

三 Amdahl定律(阿姆達爾定律)

  阿姆達爾定律 定義了串行系統並行化后加速比的計算公式和理論上限

  加速比=優化前的系統耗時/優化后的系統耗時

  加速比越高,表明優化結果越明顯

  阿姆達爾定律還定義了加速比與系統並行度和CPU數量的關系

  

  speed為加速比 , F為系統中串行化程序的比重,N為CPU的數量

  如果CPU的數量為無限大,則加速比=1/F,即加速比與系統的串行化律成反比,如果系統中必須有50%的代碼串行,則加速比是2

  下面舉個例子

  假設有個系統分為以下步驟執行,每個步驟耗時100個時間單位

  該系統為串行運行,將耗時500個時間單位

  若將步驟二和五並行化,則步驟二和五耗時將是50個時間單位。系統的整體耗時為400個時間單位

  加速比為=500/400=1.25

  5個步驟,3個串行,則系統串行比率為F=3/5=0.6,將加速比和F帶入上面的公式,可以得出N=2,即處理器的個數為2

 

  若在極端的情況下,系統的串行率依然為50%,但是並行處理器為無數個,則步驟2和5的處理時間趨於0,系統的消耗時間為300個時間單位

  加速比=500/300=1.67

  即僅提高處理器的數量不一定起有效的作用,需要提高系統中並行化模塊的比重,並在此基礎上合理增加並行處理器數量,才能已最小的投入,獲得最大的加速比


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM