2016-01-18 238 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