一步步優化JVM六:優化吞吐量[轉]

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

原文:http://ganlv.iteye.com/blog/1571315

參考:http://www.myexception.cn/software-architecture-design/1455594.html

現代JVM是一個具有靈活適應各種應用能力的軟件,盡管很多應用能夠在JVM的默認配置下運行良好,但是有些應用還是需要優化JVM配置以達到其性能要求。由于各種各樣的應用能夠運行在現在JVM上面,所以大量的JVM選項可以配置來提升應用的性能。不幸的是,對一個應用而言優化得很好的JVM配置,對應另外的應用不一定適合。所以,真正理解怎樣優化JVM配置是非常有必要的。

? ?優化現代JVM是一門很大的藝術,但是理解和應用一些基本知識能夠讓優化JVM的任務變得更加簡單。本章就是介紹這些基本知識和一些常規的步驟去優化Java HotSpot虛擬器。為了更好的理解本章的內容,你應該對JVM和垃圾回收器有一些基本的了解。

? ?本章以一步步的優化方法包括一些假設開始,在優化JVM之前,你需要先知道怎樣測試應用性能、性能需求、測試的基礎工具以及用來收集數據的垃圾回收器的命令行選項。接下來有幾個章節來說明怎么樣一步步優HotSpot虛擬器行為——啟動、內存的占用、吞吐量、延遲等。

? ?方法

? ?下面這張圖片展示了本章要說明的方法。他由一些清晰的應用性能需求開始,這個性能需求應該是應用負責人排過優先級的。與描述計算什么及輸出什么的功能層面需求相比較,系統層面需求描述了系統的一些指標,比如:吞吐量、響應時間、內存消耗、啟動時間、可用性以及易管理性等等。

? ??

?

? ? ?

? ?下一節,我們仔細看看每項系統指標對優化JVM的重要作用。

? ?優化JVM性能涉及很多權衡,當你提升某一項性能指標的時候,往往需要犧牲其他指標。比如說,為了最少的消耗內存,往往需要以延遲或者響應時間作為代價。或者,你想要提升應用的易管理性,你需要降低應用的的可用性的級別,由于可用性的提升是建立在多個JVM上的,多個JVM可用降低一個JVM出錯造成整個應用的無法使用的風險。由于有很多的取舍需要做,理解真正性能需求就變得極其重要了,理解需求才能夠正確的使用方法。

? ?一旦你知道了哪一些系統指標是重要的,接下來要做的就是選擇JVM的部署模型,選擇是部署在多JVM上面還是單個JVM上面。可用性、易管理性以及內存的占用等系統指標在選擇合適的部署模型的時候都扮演了重要角色。

? ?接下來就是選擇JVM的Runtime,HotSpot虛擬器提供了聚焦在更快的啟動速度和更小的內存占用的32位的client虛擬器,以及在32位和64位系統中有更高的吞吐量server虛擬器。系統對吞吐量、響應時間以及啟動時間的需求決定了對JVM Runtime的選擇。

? ?接下來就是要優化垃圾回收器,以滿足系統對內存占用、延遲以及吞吐量的需求,我們按照首先內存占用,其次延遲時間,最后吞吐量的順序來進行優化。

? ?優化是在不停地測試和調整配置中循環的,需要數次循環以達到性能的需求,另外,也有可能優化了一個點的時候,但是需要回到前面幾個步驟重新進行檢查。比如,假如你在幾次優化垃圾回收器之后,對應用的延遲還是不滿意,這個時候就有必要調整JVM的部署模型。另外一種可能是,應用程序有修改或者需要重新設定應用程序的性能需求。

? ?對于一些應用以及它們的系統需求來說,需要循環幾次這樣的操作,直到應用責任人對應用的性能滿意為止。

? ?假設

? ?這個一步步的優化步驟,是基于應用都有以下執行過程的假設:

? ?1、初始化階段——初始化重要的數據結構和其他需要使用的依賴庫。

? ?2、穩定階段——應用消耗大部分的時間執行其核心函數。

? ?3、可選的總結階段——比如需要制作報告。

? ?穩定階段是我們需要主要關注的地方。

? ?測試基礎設施:

? ?為了做出關于內存占用、延遲、吞吐量以及啟動時間等優化有根據的決定,并且為了證實選擇的JVM運行環境是正確的,我們需要從試驗中收集數據(需要注意的是這個試驗要能夠反映生產環境的實際情況)。因此,有一個能夠代表生產環境的性能測試環境就相當重要了。包括硬件和軟件都需要代表生產環境。簡單的說,測試環境和生產環境越接近,做出來的優化決定越靠譜。

? ?下面,我們詳細介紹需求的定義。

???性能需求詳細描述:? ?從前面我們知道,系統層面的需求決定應用的某一方面的特性,比如它的吞吐量、響應時間、消耗的內存、它的可用性以及易管理性等等。另外,功能需求決定了應用計算的內容或者產生的輸出。

? ?接下來的我們描述一下我們會涉及到層面的需求。

? ?可用性

? ?可用性是衡量應用處于可用狀態的指標。可用性需求表明了當應用的某些組件損壞或者遇到錯誤的時候,整個應用或應用的其他部分處于可用狀態。

? ?在Java應用領域,高可用性可以通過把系統的分隔成各個組件,然后運行在不同JVM上面或者在多個JVM上面運行相同應用實例來實現。一個需要平衡的點是,當提升系統的可用性,系統的維護成本會升高。引入更多的JVM或者機器,那么就有更多的JVM需要管理,這個就是造成了成本的升高和復雜性的提升。

? ?我們常見的可用性需求例子:“當系統某一部分出現錯誤的時候,不要讓整個應用程序崩潰”。

? ?易管理性

? ?易管理性是衡量系統的運行和監控的成本以及配置應用的成本。易管理性的需求表明了這個應用被管理的容易程度。通常來講,用更少的JVM去運行應用,那么需要付出更小的成本去維護和監控應用。而且更少的JVM應用配置也更加簡單,但是這個是建立犧牲應用的可用性上面的。

? ?一個簡單的易管理性需求例子:“由于有限的資源,應用只能部署到盡量少的JVM上面。”

? ?吞吐量

? ?吞吐量是衡量系統在單位時間里面完成的工作數量。吞吐量需求通常忽略延遲或者響應時間。通常情況下,提升吞吐量需要以系統響應變慢和更多內存消耗作為代價。

? ?一個吞吐量的例子:“這個應用需要每秒完成2500個事務。”

? ?延遲和響應時間

? ?延遲或者響應時間是衡量應用從接收到一個任務到完成這個任務消耗的時間。一個延遲或者響應時間的需求需要忽略吞吐量。通常來講,提升應用的響應時間需要以更低吞吐量或提高應用的內容消耗。

? ?一個延遲或者響應時間的例子:"這個應用會在60毫秒內,執行完成交易操作。"

? ?內存占用

? ?內存占用是衡量應用消耗的內存,這個內存占用是指應用在運行在某一個吞吐量、延遲以及可用性和易管理性指標下的內存消耗,內存占用是通常描述為應用運行的時候Java堆的大小或者總共需要消耗內存。通常情況下,通過增加Java堆的大小以增加應用內存占用可以提升吞吐量或者減少延遲,或者兩者兼具。當應用可用的內存減少的時候,吞吐量和延遲通常會受到損失。在給定內存的情況下,應用占用的內存可以限制應用的實例數(這個會影響可用性)。

? ? 一個例子說明內存占用的需求是:“這個應用會單獨運行在一個8G的系統上面或者多出3個應用實例運行在一個24G的應用系統上面。”

? ?啟動時間

? ?啟動時間是衡量應用初始化的時間(如:eclipse的啟動時間)。在Java應用中,大家可能對JVM優化應用的熱點需要的時間感興趣。Java應用初始化需要消耗的時間依賴于很多因素包括單不僅限于需要裝載的類的數量、需要初始化的對象數量、并且這些對象怎么初始化,以及HotSpot虛擬器運行環境的選擇(client or server,eclipse使用的HotSpot Client,Jboss會使用HotSpot Server,兩者在初始化時間上和運行過程中對熱點的優化不一樣)。

? ?拋開需要加載的類的數量、需要初始化的對象的數量以及對象如何初始化,使用HotSpot client運行環境會獲得更快的啟動速度,由于他沒有做足夠的優化,這些優化可以提供更高吞吐量和更低的延遲。相反,HotSpot Server運行環境需要更長的啟動時間,由于它需要更好多的獲得應用關于Java代碼的信息,并且對生成的機器碼進行了很高優化。

? ?啟動時間需求的例子如:“這個應用會再15秒內完成初始化。”

? ?

? ?對系統需求進行優先級排序

? ?優化操作的第一步就是對系統層面的需求進行優先級排序。做這個需要把主要的應用負責人叫到一起來商定優先級的排序,并且最終達成一致。這個討論需要在應用的架構和設計階段完成,由于這個討論可以提供非常明確的結論,比如說:什么系統需求是最重要的。

? ?對于應用的負責人來說,系統需求的優先級決定了優化操作。最重要的系統需求促使形成一些基本決定。比如說:可用性比易管理性重要,那么JVM部署模型就會采用部署多個JVM。相反如果易管理性比可用性重要,那么就更加傾向于選擇單個JVM的部署模型。

? ?如何選擇JVM部署模型和JVM Runtime會在接下來的一節中講到。

轉載于:https://my.oschina.net/newchaos/blog/3030457

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275462.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

element-ui 網格_UI備忘單:列表與網格

element-ui 網格重點 (Top highlight)Grids or lists? That is the question we will look at in this cheat sheet. While they can be used anywhere in your site, we are going to look primarily at search results, catalogs and newsfeeds. Making this choice will de…

asp.net mvc使用TagBuilder的應用程序集

在asp.net mvc編寫擴展方法中需要使用到TagBuilder類,根據msdn的說法應該應用System.Web.Mvc.dll 程序集。 TagBuilder 構造函數 .NET Framework 4 初始化 TagBuilder 類的新實例。命名空間: System.Web.Mvc程序集: System.Web.Mvc&#xf…

50行 koa-compose,面試常考的中間件原理原來這么簡單?

大家好,我是若川。源碼共讀《1個月,200人,一起讀了4周源碼》 活動第五期是學習 koa 源碼的整體架構,淺析koa洋蔥模型原理和co原理中的koa-compose源碼原理,閱讀不到50行的koa-compose源碼。這篇是izjing小哥哥的投稿。…

sqlite3源碼編譯到Android,實現SQLite跨全平臺使用

文/何曉杰Dev(高級Android架構師)著作權歸作者所有,轉載請聯系作者獲得授權。初看這個標題你可能會不解,SQLite 本身就是一個跨平臺的數據庫,在這里再說跨平臺有什么意義呢?其實不然,目前我就遇到了一個項目…

在Red Hat 4 AS U7上安裝oracle10gR2

軟件:Red Hat 4 AS U7, Oracle 10g R2 for linux32, VMWare 7, Windows 7詳細步驟清單:在Red Hat 4 AS U7上安裝oracle10gR2 1. 硬件需求: =======&#xff1…

illustrator下載_平面設計:16個Illustrator快捷方式可加快工作流程

illustrator下載I know, I know — keyboard shortcuts sound so nerdy, and you’re a graphic designer, not an IT Director, why should you learn keyboard shortcuts?我知道,我知道—鍵盤快捷鍵聽起來很書呆,而且您是圖形設計師,而不是…

手把手教你五分鐘扒個源碼寫個無敵外掛

大家好,我是若川。源碼共讀《1個月,200人,一起讀了4周源碼》 活動進行到第五期了,歡迎點鏈接加我微信 ruochuan12 報名參加。前言前段時間群里分享了一個小游戲,多次懷疑自己的眼睛以后,嘗試去寫個外掛。中…

Kubernetes 1.14重磅來襲,多項關鍵特性生產可用

走過了突飛猛進的2018年,Kubernetes在2019年終于迎來了第一個大動作:Kubernetes 1.14版本的正式發布!Kubernetes 本次發布的 1.14 版本,包含了 31 項增強,其中 10 項為 GA,12 項進入 beta 試用階段&#xf…

中英文

http://it.freesion.com/3220/4888028/13606306/#轉載于:https://www.cnblogs.com/yqskj/articles/2082326.html

open ai gpt_讓我們來談談將GPT-3 AI推文震撼到核心的那條推文

open ai gpt重點 (Top highlight)“設計師”插件 (The ‘Designer’ plugin) A couple days ago, a tweet shared by Jordan Singer turned the heads of thousands of designers. With the capabilities of GPT-3 (from OpenAI), he shared a sample of what he was able to c…

我歷時3年才寫了10余篇源碼文章,但收獲了100w+閱讀

你好,我是若川。最近來了一些讀者朋友,在這里簡單介紹自己的經歷,也許對你有些啟發。之前發過這篇文章,現在修改下聲明原創,方便保護版權。最近組織了源碼共讀活動1個月,200人,一起讀了4周源碼&…

android onlescan 參數,Android BLE:從iOS外設廣告時,在onLeScan()回調中檢索服務UUID

我正在使用Nexus 4(4.4 kitkat)作為中央和iPad作為外設.外圍設備有廣告服務.廣告包有一些數據(22字節)的服務UUID.當我嘗試從Android掃描外圍設備時,iPad外圍設備被發現.但是當我嘗試從回調中的scanRecord參數獲取服務UUID時,我找不到它.我得到的是外設發送的20byte數據.當我嘗…

第 8 章 容器網絡 - 061 - flannel 的連通與隔離

flannel 的連通與隔離 測試 bbox1 和 bbxo2 的連通性: bbox1 能夠 ping 到位于不同 subnet 的 bbox2,通過 traceroute 分析一下 bbox1 到 bbox2 的路徑。 1) bbox1 與 bbox2 不是一個 subnet,數據包發送給默認網關 10.2.9.1&#…

Javascript 檢測 頁面是否在iframe中

//檢測是否在iframe中if(self.frameElement ! null && (self.frameElement.tagName "IFRAME" || self.frameElement.tagName "iframe")){parent.parent.location "login.jsp";}轉載于:https://www.cnblogs.com/kenkofox/archive/2011…

寫給前端的算法進階指南,我是如何兩個月零基礎刷200題 等推薦

大家好,我是若川。話不多說,這一次花了幾小時精心為大家挑選了20余篇好文,供大家閱讀學習。本文閱讀技巧,先粗看標題,感興趣可以都關注一波,一起共同進步。前端從進階到入院作者ssh就職于字節跳動基礎工程團…

計算機視覺筆記本推薦_視覺靈感:Mishti筆記本

計算機視覺筆記本推薦The Mishti Notebook is a project close to my heart, wherein I experimented with screen printing techniques at the Print Labs at the National Institute of Design, Ahmedabad. Dating back to the year 2012 when the NID Print Labs was first …

Google工程師:如何看待程序員普遍缺乏數據結構和算法知識?

出處:極客時間《數據結構與算法之美》很多技術人都很迷茫,覺得自己做的項目沒有技術含量,成天就是賣苦力。技術的東西,日新月異,有些人總在忙于追求熱點新技術,東學學、西學學,平時泛泛地看技術…

android guide 中文版,Sky Guide

Sky Guide是一款能讓小伙伴們觀察銀河的手機軟件,尤其是喜歡行星、星座的小伙伴們來講,這款軟件能很好的幫助小伙伴們觀看這些,讓小伙伴們體驗不一樣的觀星樂趣,因此想要觀看的小伙伴們,趕緊來試試吧。軟件介紹&#x…

Kinect for Windows SDK發布

轉載請注明出處為KlayGE游戲引擎,本文地址為http://www.klayge.org/2011/06/17/kinect-for-windows-sdk%e5%8f%91%e5%b8%83/ 前一段時間Microsoft研究院宣布了Kinect for Windows SDK。在眾人的期盼下,Kinect for Windows SDK Beta終于發布了&#xff01…

layui選項卡嵌套選項卡_在ProtoPie中使用嵌套組件構建選項卡欄

layui選項卡嵌套選項卡One of the powerful features of ProtoPie is the ability to build fully portable and interactive UI components. We are going to make use of nested components, SVG icons, and layout constraints to build a tab bar UI component that is sel…