效能最佳化之基礎資源cpu&記憶體(JVM)

來源:互聯網
上載者:User

標籤:靜態   googl   order   支援   狀態   pil   並且   大小   保留   

本章主要介紹電腦的一些基礎資源以及作業系統處理後的一些基礎資源。

主要包括

  • cpu
  • 記憶體
  • 磁碟
  • 網路
  • 線程

本章會介紹這些資源的一些原理,介紹如何查看資源的數量,使用方式,對效能和整體電腦執行的一些影響。
本章很多內容都基於linux,不是特殊說明,就是針對linux的情況。可能在其它作業系統不一定適用。

另外還會對jvm之上的一些內容做特殊說明,因為大家很大的一些積累都在jvm之上,內部的系統基本也建立在jvm上。

  • jvm 指令
  • jvm 記憶體使用量
cpu

cpu是電腦裡最重要的資源,沒有之一,並且在效能最佳化領域,也是最需要理解的內容。

在代碼執行方面,cpu執行代碼的最終指令,調度資源,操作記憶體,對完成一個任務的各個方面都有較大影響。

首先,在linux中查看cpu資訊的基礎指令是看cpu的硬體資訊

cat /proc/cpuinfoo

可以看到cpu的核心數,單核的頻率,以及cpu支援的一些特性。

另外一個最多接觸到的內容是 load average 三聯組,在很多命令中都會體現,w,top,uptime等等。

分別表示最近1,5,15分鐘的cpu使用壓力。

關於cpu的使用%比,和cpu load,是兩個相似又有不同的概念,在linux裡,cpu%也有不同的解釋,具體不同,見下方解釋。

cpu使用%

  • top的最上面的部分
  • us 總體使用者態cpu的使用%
  • sy 核心態
  • wa cpu等待,這裡主要是等待io
    • iowait的產生是因為cpu處理的請求除了iowait之外就沒有其它事情可以做了,或者說所有的線程,如果runable狀態的都在做io操作
  • id 空閑
  • top中線程上看到的cpu%,是1個cpu對應100%,上面說的幾個值是所有cpu對應100%,所以在多cpu的時候,會看到線程已經大於200%了,而上面的資料還很正常

load

  • 主要關注的是等待執行的隊列的長度
  • 因為等待的隊列長,造成的環境切換也較多
    • 環境切換可以看vmstat的cs部分
      •  一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數,如:
      • 具體vmstat參數請自行google,或者度娘詳情,這兒不做介紹
  • 另外如果cpu使用和load不同步,需要注意任務大大小。
    • 如果任務太小,會造成load》cpu%
    • 任務很大,cpu%》load
  • 關於load的值,也是要看cpu的核心數,如果load數<=cpu數,表明某個時間段,沒有任何任務是需要等待cpu資源才能開始處理的
記憶體

記憶體管理

這裡主要介紹java虛擬機器內部的記憶體管理。

jvm相關的記憶體主要分為以下幾個部分

  • 方法棧 & 本地方法棧
    • 放大呼叫堆疊
  • 方法區
    • perm區,類資訊中繼資料,靜態對象等
  • 堆
    • 各種對象,new出來的東西
  • Native Memory(C Heap)
    • NIO的DirectBuffer
    • JNI
    • Compile  jit的結果

關鍵區段堆,按照現在的流行用法又分為

  • 新生代
    • Eden
    • S0
    • S1
  • 老年代

通過java參數,-Xmn可以調整新生代和老年代的大小
-XX:SurvivorRatio 可以調整Eden和S0S1的大小  S1=S0=mn/(SurvivorRatio+2)
-XX:MaxTenuringThreshold 對象在新生代存活的次數

-XX:MaxPermSize 可以調整perm區的大小
-Xss 可以調整方法棧的大小
-XX:MaxDirectMemorySize 可以調整Native Memory的大小

對象在Eden和s0以及老年代的存活一般策略,有例外。

  • new的時候在Eden,Eden滿了,做一次YGC
  • 剩餘對象放在在S0,清空Eden
  • 繼續new,在Eden,Eden滿了的時候,做YGC和S0一起做
  • 剩餘對象在S1,這個時候,如果有對象在S0或者S1的次數大於MaxTenuringThreshold,這種對象放到Old區
  • 如果S1滿了,所有對象到Old區
  • 如果Old區滿了,則做fullgc
  • 依次迴圈

從使用上來說,最滿意的方式是,經過幾輪往old區晉陞後,old區趨於不變。old區可以存放一些類似於緩衝對象等等,容器相關對象等需要長期生存的對象。
Eden區和S0區夠大,對象在新生代的存活時間不超過MaxTenuringThreshold。

基本做法,從開始就把對象往2個方向設計,是長期存活,或者短期存活。
合理設計新老生代大小。

對記憶體的最佳化,其實主要也體現在對cpu時間使用上,包含對象建立,老對象地址尋找,對象垃圾收集,我們能做的是盡量少的建立對象,以及盡量少的垃圾收集,對於老對象地址的尋找,暫時沒有太多方法。

記憶體泄露

記憶體泄露,主要涉及到垃圾收集方法,現在流行的方法,是通過一些gcroot,來尋找所有在用的對象,儲存下來,其它對象都gc掉。

一般的gcroot有以下一些類型的對象

  • 當前存活的線程
  • 當前load的class
  • 存活的線程棧上的方法參數和本地參數
  • jni相關的global資訊,以及相關棧上的方法參數,和本地參數
  • 同步的時候用的monitor對象
  • jvm的一些保留對象

如果有對象和這些相關的內容一直沒有脫開關係,就有可能造成記憶體溢出。

一些典型的案例

  • 某個應用使用了一個類上的static map 做為緩衝,key越來越多,最後就溢出了
  • 某個應用需要動態建立類型,如果這個對象建立一直使用同一個classloader,最後就會造成load的class越來越多,perm區溢出

需要區分對待記憶體溢出和記憶體使用量過快,以及相關的轉化過程

 

查看配置的主要方式

通過以下命令,可以看到你想要的配置,如果有其它參數線上上有配置的,直接加上參數。

java -server -Xmx128m -XX:+PrintFlagsFinal | grep MaxHeapSize

jvm 指令

java的代碼在編譯成class之後,就變成了jvm可以認識的特定格式了,具體格式,大家可以參考jvm虛擬機器規範。

最近的幾個版本,可以在這裡拿到,這個地址上也包好java語言的規範,2者的區別是,一個是介紹如何編寫java虛擬機器的,一個是介紹如何編寫java代碼的。

http://docs.oracle.com/javase/specs/

拋開jit,java就是針對jvm指令,一步一步執行的。

jvm對編譯前的語言沒有任何要求,所有現在有很多基於jvm的其它文法的語言,如scala,groovy,jruby等等。

而asm就是一套認識jvm指令,或者說是class檔案格式的工具。

jvm在載入class的時候,提供了某些功能,可以讓人為修改class對象,或者說是修改class最終載入到jvm的位元組流。

通過asm對class位元組流的修改,修改了class實際執行的行為,而達到我們的目的。

一些簡單的例子

  • 通過解析class,在特定的一些類的方法前後,加入代碼,方法的開頭記錄一個目前時間,方法結束的時候,再做一個目前時間和之前記錄的時間的比較,就是一個簡單執行時間profiler
  • 通過對某個類的構造器方法的監控,可以找到所有這個類以及子類的建立數量
  • 通過對類方法的調用的參數和結果返回,可以記錄方法的一些具體參數和結果,用於debug,或者確認方法是否被調用過
  • 通過對方法開頭的攔截,直接返回自己想要的結果,就是一個調用mock架構

 

 

 

《~~~後續更精彩~~~》

 

效能最佳化之基礎資源cpu&記憶體(JVM)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.