2016-01-18 32 views
1

我有Ubuntu的服務器,我有8 GB的RAM。當我嘗試將堆大小設置爲8GB時,我的Web服務器(weblogic)無法啓動。但如果我增加交換大小 大小爲11 GB,web服務器開始。增加交換大小如何增加堆大小?

所以我的問題是如何增加 交換大小後,我的web服務器(當我有8 GB的RAM,其中1到2 GB是OS需要)分配8GB堆大小?

+0

出於好奇,在增加它之前,您的交換大小是多少? –

+0

如果你有一個擁有8GB堆和11GB交換空間的進程,那麼你的生活就處於邊緣(除非這個Web服務器是唯一可以在系統上運行的進程)一個進程的整個虛擬地址空間必須備份到磁盤(即使有可用的內存) – user3344003

回答

3

做。不。做這個。

獲得更多的記憶。

Java和Swap Do.不。混合。 Java和Swap就像「穿越流」一樣糟糕。

Java堆的一部分將被交換出來,然後Java將會GC,這會使得該框非常糟糕,並且堆的一部分將被交換出來,Java將再次GC。

沖洗並重復,直到你最終殺死了-9個Weblogic。

獲得更多的記憶,或沒有。交換不是一種選擇。

補遺:

您的機器有「虛擬內存」(VM)。通過添加交換,可以擴展該VM。當虛擬機的數量超過實際內存時,機器會將不活動的內存頁「換出」到交換空間,然後「交換」將要從交換空間活動到內存的頁面。如果你有一堆很少需要時間的空閒進程,這並不是非常糟糕。

但Java擴大了這個問題。當物理RAM用完時,該RAM的一部分被換出到磁盤。當某些內存是Java堆時,那麼當垃圾收集器啓動時會遇到很大問題。因爲通常情況下GC會觸及堆的每一頁。這意味着所有的堆頁都需要「活躍」,因此「交換」。

但是,如果他們不適合,那麼你有一個像8難題一樣的問題。你在哪裏將內存從磁盤中移出。這被稱爲顛簸。

交換的JVM堆是GC是最壞情況抖動的教科書案例。

機器讓你分配額外的內存,因爲它認爲你有更多的內存,因爲你的虛擬內存(物理RAM +交換)更大。

+0

Hartungh您能否詳細說明您的陳述'Java堆的一部分將被交換出來,然後Java將GC,這會使得該框非常糟糕,並且仍然是部分的堆將被交換出來,而Java將GC再次........'.GC將如何在這裏扮演角色?另外,我沒有得到我如何能夠分配8GB堆來處理只有總RAM的情況8 GB? – emilly

+0

非常感謝Hartung – emilly