2013-10-23 85 views
0

我正在運行2個jboss5.1服務器,在linux上& solaris機器,具有類似的jvm(xms & xmx)配置。但是,當我檢查服務器啓動的內存使用情況:在linux和solaris機器上的jvm之間的區別

  • Linux機器 - 2.1GB內存使用(RES)

  • Solaris機器 - 500MB內存使用

內存使用通過linux上的jboss進程從一開始就高於1 GB(甚至在任何類加載開始之前)。當我從Linux轉儲它的大小隻有700 MB左右。

什麼可能導致這樣的記憶差異?

+0

您使用的是什麼JVM(版本,編輯器)?使用哪些選項,所有這些選項?是否涉及本地庫?你使用什麼命令來衡量內存使用情況?什麼說兩個操作系統上的'pmap -x java_pid'? – jlliagre

回答

0

很多事情可能會有所不同,並且沒有足夠的信息來了解什麼。例如,他們是64位操作系統還是64位JVM? malloc的行爲如何? - 這取決於操作系統。僅僅因爲一個進程需要N字節的內存並不意味着它會立即得到那麼多的內存 - 內存分配器可以非常聰明。然後就是操作系統如何報告它是否實際上是蘋果到蘋果的測量。

「內存使用量」意味着很多事情。我們是在談論Java堆(如果你在啓動後拿起兩個虛擬機的堆轉儲和相同的啓動位工作,他們是相同的大小還是不同的?)或者加上類數據等?圖片中還有熱點,將Java字節碼編譯爲兩個操作系統之間不同的本地代碼(如果您的Solaris機器是Sparc機器,可能會有很大的差異)

最有可能的事情是64位vs. 32位,但是不可能說。您可能會在每個工具上使用一些本地分析工具來查看哪些調用正在分配內存 - 這將開始澄清事情。

除非它引起問題,否則可能不需要擔心 - 但健康的好奇心是一件好事。

+0

嘗試使用32和64位,但結果是相同的。 JProfiler和轉儲(內存分析器)沒有顯示出兩者之間的差異。問題是即使我們可以看到內存使用率很高但仍然小於我們的最大堆大小(即3GB),但是Linux機器應用程序將使用OutOfMemory。 –