簡體   English   中英

SuSE Linux的最大Java堆空間是多少

[英]What is the Maximum Java Heap Space for SuSE Linux

此問題與Java拒絕啟動-無法為對象堆預留足夠的空間有關 ,應該足夠容易找出。 然而; 我的搜索沒有產生任何有用的信息。

本質上,我們在具有相同硬件的不同機器上具有2個32位操作系統(RedHat和SuSE)。 兩者都使用相同的JVM,並且都執行相同的命令行。 RedHat可以很好地工作,但是SuSE報告沒有足夠的內存。

我們只需要知道這是否是我們正在使用的SuSE版本的限制或其他原因。

'cat / proc / version'給我們:

Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005

'uname -a'為我們提供了兩種機器的以下信息:

UTC 2005 i686 i686 i386 GNU/Linux

JVM內存限制與可用的最大可用連續塊有關,而不與可用內存量有關。 限制從大約1.4 GB到超過2.0 GB不等,具體取決於您的操作系統將各種內容放置在內存中的位置。 我不知道Redhat或Suse將內容加載到內存中的詳細信息,但可能是suse將某些庫映射到RAM中間的地址,Redhat可能在末尾將其映射(推測)。

請記住,您在Java中的實際內存使用量超過了為Xmx指定的內存使用量。 其他內存設置也會影響堆的大小(例如permgen)。 因此,也可能是Suse上的燙發空間具有比Redhat更大的默認空間。

另外,根據應用程序的內存分配配置文件,您可能會以較小的堆大小和不同的垃圾回收選項而脫身。 這里有一些詳細信息( http://java.sun.com/performance/reference/whitepapers/tuning.html )和其他地方。 例如,如果您分配了很多小的臨時塊,那么您將需要不同的GC設置,而不是擁有大量的長期對象。

關於鏈接的問題,為什么不只使用Redhat? 那可能是一個簡單的解決方案,但是我保證,與深入研究Java調優和OS內存管理的神秘世界相比,它可以更快地解決您的問題:P

首先,當您面臨如此大的地址空間壓力時,您很瘋狂地運行32位操作系統。 遷移到64位Linux上的64位JVM。 您已經浪費了多少時間嘗試診斷此問題,而您從一開始就懷疑該問題會隨着64位系統的更大地址空間消失?

其次,眾所周知,在所有Linux供應商中,Red Hat擁有最多的內核工程師,並對RHEL產品中的內核進行了一些認真的調整。 這些通常包括針對像您這樣的大型工作負載的補丁程序(嗯,對於32位系統而言,這是一個很大的工作量,對於64位系統而言,這沒什么特別的)。 因此,很有可能最終原因是RHEL會讓其他客戶做與您相同的瘋狂事情,而您從支持這些客戶的工作中受益匪淺。

最后,盡管如此,由於我懷疑您將堅持嘗試尋找一種在32位SuSE上執行此操作的方法,因此我將指出Linux在32位x86上提供了多種地址空間的折衷方案,並且可能(但不確定)您的SuSE系統只是選擇了其他折衷方案。 如果您可以調出正在運行的內核的配置(通常在/ boot / config ....中),則可以比較HIGHMEM之類的設置。

直到幾年前,常規選項是2:2拆分,也就是說,用戶空間僅限於2GiB地址空間,這是一種易於編程的解決方案,並且效率很高,但在這種情況下,顯然您無法擁有所需的堆,因為不會為程序文本,堆棧等留出空間。最近的趨勢是3:1(類似於Windows / 3GB開關),這種擴展以犧牲OS內核本身到更少空間的代價為代價,擴展了用戶空間地址空間。造成自己的問題。 這可能有用,但是會局促不整,因此如果它對您的工作不起作用,我也不會感到驚訝。 最后,較新的Linux內核還提供了一個選項,您可以在其中獲得4GiB 32位用戶空間,這可能足以使您的作業可靠地運行,並且性能成本很高,因為顯然用戶空間和內核地址無法共存。

要嘗試此操作,您需要一個新內核。 您也許可以只安裝SuSE提供的一個(請查看它們是否提供其他選擇,例如“ PAE”選項),或者您可能必須自己編譯,在這種情況下,它可能會使您的支持合同無效。

但實際上,您應該只選擇選項1,切換到64位JVM,然后站起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM