增加交换大小如何允许我增加堆大小?

emi*_*lly 1 java operating-system heap-memory

我有 ubuntu 服务器,有 8 GB RAM。当我尝试将堆大小设置为 8GB 时,我的 Web 服务器(weblogic)无法启动。但如果我将交换大小增加到 11 GB,网络服务器就会启动。

所以我的问题是,在增加交换大小后,如何为我的 Web 服务器分配 8GB 堆大小(当我有 8 GB RAM,操作系统需要其中 1 到 2 GB 时)?

Wil*_*ung 5

做。不是。做这个。

获得更多内存。

Java 和 Swap 做。不是。混合。Java和Swap就像“过河拆桥”一样糟糕。

Java堆的一部分将被换出,然后Java将进行GC,这将严重破坏盒子,并且仍有部分堆将被换出,Java将再次进行GC。

冲洗并重复,直到最终杀死 -9 Weblogic。

获取更多内存,或者没有内存。交换不是一个选择。

附加物:

您的机器有“虚拟内存”(VM)。通过添加交换,您可以扩展该虚拟机。当虚拟机多于实际内存时,机器会将不活动的内存页面“换出”到交换空间,然后将想要活动的页面从交换空间“换入”到 RAM。如果您有一堆很少需要时间的空闲进程,那么这并不是非常糟糕。

但 Java 却放大了这个问题。当物理 RAM 耗尽时,部分 RAM 会被换出到磁盘。当其中一些 RAM 是 Java 堆时,当垃圾收集器启动时就会遇到大问题。因为,一般来说,GC 会触及堆的每个页面。这意味着所有堆页面都需要处于“活动”状态,从而“换入”。

但如果它们不适合,就会遇到类似 8 拼图的问题。将内存移入和移出磁盘的位置。这称为颠簸。

交换的 JVM 堆(即 GC)是最坏情况抖动的教科书案例。

机器允许您分配额外的内存,因为它认为您拥有更多内存,因为您的虚拟内存(物理 RAM + 交换)更大。