如果我有一個高端服務器,例如1T內存和8x4core CPU ...一臺帶有一臺應用服務器或多臺應用服務器的高端服務器?
如果我運行多個App Server(在不同的JVM上)而不是僅僅一個App Server,它會帶來更多的性能嗎?
在應用程序服務器上,我將運行一些相互交換消息的服務(EAR與消息驅動的bean)。
順便說一句,有Java 64位現在沒有內存限制嗎? http://java.sun.com/products/hotspot/whitepaper.html#64
如果我有一個高端服務器,例如1T內存和8x4core CPU ...一臺帶有一臺應用服務器或多臺應用服務器的高端服務器?
如果我運行多個App Server(在不同的JVM上)而不是僅僅一個App Server,它會帶來更多的性能嗎?
在應用程序服務器上,我將運行一些相互交換消息的服務(EAR與消息驅動的bean)。
順便說一句,有Java 64位現在沒有內存限制嗎? http://java.sun.com/products/hotspot/whitepaper.html#64
如果我運行多個App Server(在不同的JVM上)而不是僅僅一個App Server,它會帶來更多的性能嗎?
有幾件事情要考慮:
單一應用服務器意味着失敗的單點。對於許多應用程序而言,這不是一種選擇,使用水平和垂直縮放是常見配置(即每臺機器和多臺機器有多個VM)。如果他們很小,增加更多的機器顯然更容易/更便宜。
大堆需要更長時間才能填充,因此應用程序在發生垃圾回收之前運行時間更長。然而,更大的堆也需要更長的時間來壓縮並導致垃圾回收花費更長時間。施膠VM通常意味着找到頻率和持續時間之間的良好折衷(換句話說,你不要總想給儘可能多的RAM儘可能一個VM)
所以,我的經驗,在運行多個託管多個JVM的機器是通常的選擇(並且通常比一個巨大的野獸便宜並且給你更多的靈活性)。
當您需要進行進程外通信時,會自動產生性能問題,所以問題在於應用程序服務器的擴展能力是否不夠好,這樣可以得到回報。
作爲一個基本的經驗規則,JVM設計允許使用任意數量的CPU和操作系統提供的任意數量的RAM。實際限制是特定於JVM實現的,在選擇是否存在與您相關的限制之前,您需要非常仔細地閱讀規範。
鑑於您有一個可以利用硬件的JVM,您需要一個可以適當調整的應用程序服務器。目前常見的瓶頸是每秒可處理的Web請求數量 - 現代服務器應該能夠每秒處理10000個請求(請參閱http://www.kegel.com/c10k.html),但並非所有情況都是如此。
因此,首先確定您最迫切的需求(每秒連接數?內存使用率?網絡帶寬?)並使用它來確定最佳平臺+ jvm +應用程序服務器組合。如果您有具體需求,供應商通常會很樂意協助您進行銷售。
最有可能的是,您將通過運行多個JVM與更小的堆而不是一個單獨的大型JVM。有這個有兩個原因:
小堆意味着較短垃圾收集
更多JVM意味着用於內部JVM內部資源,如線程池和其他同步訪問較少的競爭。
您應該裝入該盒子的JVM數量取決於應用程序的功能。確定這一點的最好方法是設置一個負載測試,它模擬生產負載並觀察系統可處理的請求數量隨着添加的JVM數量的增長而增長。在某些時候,您會看到添加更多JVM不會提高吞吐量。那就是你應該停下來的地方。
然而,還有另一個考慮因素。最好有多個物理機器,而不是一個大胖盒子。這是可靠性。如果這個盒子出於某種原因脫機,它將使用它內部運行的所有應用程序服務器。與單個機箱相比,運行許多獨立小型物理機器的基礎設施受單個機器故障影響較小。
@Slava @是這個猜想,還是你可以指出一些研究(帶有真實性能數據)支持這一點? – 2010-03-30 11:29:34
這是經驗加普通智慧。另外,當我爲BEA工作時,我們曾經爲WebLogic推薦相同的配置。如果你願意,我相信你可以在網上查詢它。 – 2010-03-30 18:11:39
你是指單臺機器上有多個JVM? – Thilo 2010-03-30 08:08:12
是的,由於某些設置原因(安裝機器的物理空間有限),我想嘗試在一臺* super *機器上運行多個JVM。 – elgcom 2010-03-30 18:52:27