相對較小的房間(Nikko Carmel I / II)擠滿了人,似乎只靠近站立的房間(坐席幫助每個人就座)。 早上的策略性主題演講稍有結束,人們在試圖離開時陷入了宴會廳,而本次演講的提早開始導致很多人遲到,這有些分散注意力。 我不怪演講者提早開始,因為他有很多很好的信息要講。 最大的問題是后勤延遲迫使人們離開已經超過計劃的結束時間的主題演講。
Muray具有七個虛擬化最佳實踐,只有前兩個(虛擬機內存和虛擬CPU /物理CPU /線程)是Java特有的。 大多數人在存儲區域而不是處理/ CPU區域犯了虛擬化錯誤。 Murray指出,Java開發人員無需執行任何操作即可使用虛擬化。 他們不需要更改任何代碼,也不需要更改任何設置。
- 虛擬機內存
- 中央處理器
- 磁盤I / O
- 網絡I / O
- 計時表
- 微觀基準
- 監控與管理
一個易于理解的虛擬化Java應用程序的初始最佳實踐是:“ Java堆需要始終保持在物理內存中。” 他還建議使用大內存頁。 不要將那么多虛擬機塞入物理內存,以使每個VM的總最大堆空間使用的內存多于物理內存中可用的內存。
默里的第一個正式最佳實踐是“ 1。 虛擬機內存:調整虛擬機的內存大小以留出足夠的空間。” 他指出,有一個公式可以計算要使用的內存量,以考慮該內存的許多需求。 他說,此公式已記錄在白皮書和同事的書中。 Murray說,雖然對于一個小型應用程序可能有太多的JVM內存,但他通常贊成為JVM分配大量的內存以用于虛擬化。 Murray還建議使用VMware Distributed Resource Scheduler(DRS) 。 他的另一個廣告宣傳是針對Java的vFabric彈性內存(EM4J),它與VMware的稱為“ tc服務器 ”的“ Tomcat之味”一起提供。 Murray表示,盡管在大多數情況下都擔心Java中內存的過度使用,但在使用tc服務器和EM4J時并不需要。 Murray還使用了esxtop 。
解決了內存問題后,Murray轉向了主要的CPU。 他從對線程和虛擬CPU的觀察開始本節。 他的幻燈片中寫道:“ Java線程可隨時在一個vCPU上執行”,而“ vCPU則可隨時在一個物理CPU上調度。” Murray補充說,他與之合作的大多數客戶正在使用四個虛擬CPU,但現在最多支持32個虛擬CPU。線程通常在監視器或套接字上等待釋放,并且Murray認為大多數Java應用程序并未完全使用theads。 通常,Murray傾向于使用“對您的應用程序來說實用的虛擬CPU數量最少”。 Murray表示,使用命令行選項-Xgcthreads等同于說:“我比JVM更了解。”
Murray表示虛擬化不再害怕I / O。 他說,從Java虛擬化的角度來看,網絡I / O比磁盤I / O更重要。 Murray指出,交換對物理機上的VM不利,對于虛擬機上的VM同樣不利。
Murray提供的一個更好的建議應該被更普遍地理解(但似乎不是),它只是對自己的應用程序進行基準測試,并且僅基于特定應用程序的基準測試來做出決策。 他補充說,使用應用程序的“代表性子集”還不夠好。
為了進行監視和管理,Murray建議從每臺計算機開始一個JVM進程,然后逐步擴展到虛擬機中所需的JVM數量,一次確定一個上限。 他在幻燈片上的最后一個項目符號建議使用vCenter或esxtop來查看Java應用程序的哪些部分正在消耗資源。
Murray的“簡短故事”是,對于虛擬化而言,Java開發人員通常不需要調整JVM垃圾回收策略,線程池大小或JDBC連接池大小,而對于物理服務器則不需要進行任何調整。 唯一應使用的命令行選項是用于指定大頁面。
Murray討論了使用Capacity Planner進行大約30天的收集,以了解哪些候選人是虛擬化的良好候選人。 Murray指出,您不能憑空創建硬件,因此在這種情況下,虛擬化將無法??幫助大量使用硬件。
Murray總結說:“ Java中間件和應用程序應該虛擬化。”
Murray在VMware工作,VMware 在VMware最佳實踐指南上提供了企業Java應用程序 。 Murray在演講中引用了VMware的技術白皮書 。
參考: JavaOne 2011:虛擬化Java應用程序: JCG合作伙伴的 最佳實踐 ? 實際事件啟發博客中的達斯汀·馬克思。
翻譯自: https://www.javacodegeeks.com/2012/02/virtualizing-your-java-applications.html