我有一个ubuntu服务器,其中我有8GB的RAM。当我试图将堆大小设为8GB时,我的web服务器(Weblogic)不会启动。但是如果我将交换大小增加到11 GB,webserver就启动了。
那么,我的问题是,在增加交换大小之后,如何将8GB堆大小分配给我的web服务器(当我有8GB内存,其中操作系统需要1到2GB)?
发布于 2016-01-18 15:31:25
做。不。这样做。
多点记忆。
Java和交换做。不。混合。Java和交换就像“横穿流”一样糟糕。
Java堆的一部分将被交换掉,然后Java将GC,这将严重地破坏盒子,而堆的一部分仍将被交换掉,Java将再次GC。
冲洗和重复,直到你最终杀死-9 Weblogic。
得到更多的记忆,否则就不用了。交换不是一种选择。
增编:
您的机器有“虚拟内存”(VM)。通过添加交换,可以扩展VM。当您拥有比实际内存更多的VM时,机器将将不活动的内存页“交换”到交换空间,然后“交换在”希望从交换空间激活到RAM的页。如果您有一堆空闲的进程很少需要时间,这并不是非常可怕的。
但是Java放大了这个问题。当您耗尽物理RAM时,会将其中一些RAM交换到磁盘上。当其中一些RAM是Java堆时,当垃圾收集器启动时,您就会遇到一个大问题。因为,通常情况下,GC会触及堆的每个页面。这意味着所有的堆页面都需要是“活动的”,因此,“交换了”。
但如果他们不适合,那么你有一个问题,像8益智。将内存从磁盘中移出的地方。这叫鞭打。
一个交换的JVM堆,即GC,是最坏情况的教科书案例。
机器允许您分配额外的内存,因为它认为您有更多的内存,因为您的虚拟内存(物理RAM +交换)更大。
https://stackoverflow.com/questions/34858289
复制相似问题