2013-03-26 181 views
0

我們有一個在JBoss 7.1.1中運行的Java EE應用程序,我們必須在VirtualMachines(如VMWare ESXI)中運行它。VMWare ESXI虛擬機中的jBoss緩慢

問題是,當我們在VM中運行我們的應用程序時,性能下降了大約50%。

看起來像GC變得瘋狂......據我所知,當GC運行時,它比「正常」更長的時間比正常情況更長,並且同時阻止應用程序。

有沒有其他人有過這樣的經歷?任何提示,調整或我可以遵循的光線?

在此先感謝。


編輯

  • JVM具有XMX和X毫秒= 1Gb的
  • VM已經4GB內存
  • Ubuntu服務器64
  • 甲骨文JVM 64
+0

沒有更多的細節你的配置看起來很難幫助你。什麼是jvm的內存配置?虛擬機有多少內存?什麼樣的操作系統(32位vs 64位)什麼樣的jvm(供應商和arch)。沒有這個信息的問題太籠統了。 – ctomc 2013-03-27 13:48:48

+0

對不起,我編輯添加信息的問題。 – caarlos0 2013-03-27 14:03:56

回答

0

我要說的是,在將您的應用程序移動到配置您發佈的應用程序之前,它在32位系統上運行tem和32bit jvm並使用相同的jvm參數。

特技是你用64位java移動到64位,但仍然爲你的應用程序分配相同數量的堆大小,現實中發生的事情是,你的應用程序現在有一半的可用內存。 64位jvm上的每個對象的大小是32位jvm的兩倍。

給定的配置,你有我建議幾個解決方案:

鑑於您的應用程序不會已經分配了超過1.3G,認爲通過安裝32位jvm並使用-Xms1300m -Xmx1300m運行可以獲得最佳性能。

你可以更進一步,並擁有32位Linux 32位Linux安裝。 64位jvm僅在需要超過1.3G堆的情況下才有用,否則會增加太多開銷。

你也可以用

-verbose:gc -XX:+PrintGCDetails 

運行的JVM會告訴你什麼是與GC發生的事情,這可以進一步幫助你調整你的JVM。