2009-02-18 96 views
12

我們在64位Linux 2.6服務器上運行32位Sun Java 5 JVM,但顯然這將每個進程的最大內存限制爲2GB。所以有人提議我們升級到64位的JVM來消除限制。我們目前在服務器上運行多個JVM(Tomcat實例)以保持2GB的限制,但爲了簡化部署,我們希望整合它們。在64位Linux服務器上運行64位JVM的好處/缺點?

如果你已經這樣做了,你可以分享一下你的經驗嗎?您是否正在生產64位JVM?你會推薦留在Java 5,還是可以同時移動到Java 6 64位?我們是否應該期待性能問題,無論是更好還是更糟?我們應該關注迴歸測試嗎?

感謝您的任何提示!

回答

9

Kepler科學運營中心,我們有大約50臺機器,每臺32-64G。 JVM堆一般爲7-20G。我們使用Java 6.操作系統具有Linux 2.6內核。

當我們遷移到64位時,我預計運行64位JVM時會出現一些問題,但確實沒有。由於堆轉儲非常大,內存不足情況更難以調試。 Java Service Wrapper需要一些修改來支持更大的堆大小。

網上有一些網站聲稱GC不能很好地擴展到2G,但我還沒有看到任何問題。最後,我們正在進行吞吐量密集型交互密集型計算。我從來沒有看過延遲差異;我的猜測是最糟糕的情況GC堆棧的大小會延長GC延遲時間。

6

我們使用一個64位JVM,堆數大約爲40   Gb。在我們的應用程序中,大量數據被緩存,導致大量的「舊」一代。默認的垃圾收集設置工作不正常,需要在生產中進行一些痛苦的調整。課程:確保您有足夠的負載測試基礎架構,然後按照如此放大。也就是說,一旦我們找到了解決辦法,GC的性能就非常好。

+3

如果您有共享的結果或意見,我希望聽到更多有關垃圾收集器調整的調查結果?這是Sun JVM? – 2009-02-18 19:08:42

5

我可以確認肖恩的經驗。我們正在運行純Java,計算密集型Web服務(自制的Jetty集成,現在有超過1k個servlet線程,內存中加載數據大於6Gb),而且我們所有的應用程序都可以很好地擴展到64位JVM 2年前遷移。我建議使用最新的Sun JVM,因爲在前幾個版本中已經完成了GC開銷的實質性改進。我對Tanukisoftware的Wrapper也沒有任何問題。

+0

我很早以前就在Tanukisoftware的Wrapper中做了這個改變。他們的網頁似乎表明他們現在有64位二進制文​​件可供下載。也許我會更新到最新版本。謝謝! – 2009-02-18 01:35:12

3

您所編寫的任何JNI代碼假設它以32位運行都需要重新測試。對於你可能遇到的問題,你可能需要將c代碼從32位移到64位,看看這個鏈接。這不是特定於JNI的,但仍然適用。 http://www.ibm.com/developerworks/library/l-port64.html

+1

此外,是否需要重新編譯*? – 2009-02-18 04:59:24

0

如果您使用numactl的--show你可以看到在你的服務器的存儲庫的大小。 我發現GC在使用多個存儲體時不能很好地擴展。這是一個比軟件問題更多的硬件恕我直言,但它可以影響你所有的GC時間。

1

遷移到JDK5從32位JDK6 64位(Windows服務器上)後,我們在「燙髮根空間」的內存塊了泄漏。玩過JDK參數後,它已解決。希望你會比我們更幸運。

+1

嗨,我很想知道更多關於你調整來解決PermGen空間問題的參數。我有一個在32位Windows上運行正常的應用程序,但在RedHat 64位中存在PermGen空間不足的內存。 謝謝。 – ThiamTeck 2010-06-14 08:20:40