《Java性能優化指南》讀書筆記-JVM性能調優具體方法

選擇jvm部署模式

應用在部署的時候,是單個jvm實例,仍是選擇多個實例?該如何選擇? 負載均衡

單個jvm實例存在的問題是單點故障。當咱們jvm實例出現故障的時候或者咱們須要重啓或者部署的時候都會影響到應用的可用性,這對於互聯網產品初期,對於應用可用性要求不高的應用是能夠選擇該模式的。 運維

多個jvm實例組成的應用集羣。帶來的問題有系統結構更加複雜,咱們須要配置成爲自動故障轉移,當一個問題出問題或者在維護的時候,還有別的jvm可以接管服務,從而不影響系統的可用性,若是咱們須要多個jvm實例同時提供服務,以增長系統的吞吐量,或者下降單個jvm實例的內存量,系統壓力,能夠配置成爲負載均衡,而多個jvm實例又會消耗更多的系統資源,增長系統的管理成本。 jvm

所以對於部署的jvm實例數量建議是適應業務的發展逐步增長實例,不該過早部署複雜的結構,不然會帶來不少運維管理上的成本。好比你要排查一個問題的時候,你查看日誌因爲部署了多個jvm實例,當你沒法肯定在哪一個實例上的時候,則須要查看多個jvm實例,你部署的實例越多則越困難,還有你的代碼版本升級還須要發佈多個實例,配置文件可能又會有多份,若是你沒有足夠好的自動化運維管理多實例的工具的話,則你的運維成本會隨着jvm實例的數量成線性增加,這種人工成本的增長將變得不可行。 工具


選擇jvm運行模式

jvm有兩種運行模式: 性能

Client模式特色是啓動快、佔用內存少、JIT編譯器生產代碼的速度快,可是代碼的容許速度相對更慢。 測試

Server模式則提供了更加複雜的生成代碼優化,所以代碼的執行速度快,啓動慢,佔用內存更多。 優化

所以咱們在開發和測試環境上選擇默認的Client模式,在生產環境上通常使用Server模式。 spa

jvm啓動參數中添加-server便可開啓Server模式。 操作系統

選擇JVM位數

jvm分爲32位和64位,增長了位數也就增長了jvm的尋址空間,讓jvm支持更大的堆,具體在各操做系統平臺上內存限制以下所示: 日誌

有經驗數據代表32位的性能要好於64位的性能,所以若是32位的內存夠用的話不該該選擇64位的jvm。


JVM內存配置調優


  1. 當應用初上線的時候若沒法準確估算堆大小的時候則不配置堆大小,讓jvm自動分配。
  2. 系統運行穩定以後,查看jvm活躍數據所佔用的堆空間大小,查看年老代和永久代活躍數據在穩定運行期的空間大小。通常將-Xms和-Xmx設置爲年老代活躍數據空間的3-4倍。永久代的設置-XX:PermSize及-XX:MaxPermSize應該設置爲永久代活躍空間大小的1.2至1.5倍。
  3. -Xms和-Xmx通常配置成同樣,固然這樣會浪費一些空間,可是會避免由於Jvm堆動態擴容而引發的Full GC和jvm響應延遲。
相關文章
相關標籤/搜索