我有一个 8 GB RAM 服务器(专用),目前有 KVM 虚拟机在上面运行(成功),然而我正在考虑转向 OpenVZ,因为 KVM 似乎有点过度,而且对于我的用途来说开销很大。
过去我曾使用过我自己和其他提供商托管的 OpenVZ 容器,但 Java 似乎无法很好地与它们配合使用。一个例子是,如果我给一个容器 2 GB 的 RAM(没有爆发)(有或没有 vswap 都无所谓),那么 Java 实例只能调整为最多使用 1500 MB 的 RAM(-Xmx、-Xms)。
理想情况下,我希望能够创建具有大约 256MB、512MB、768 RAM 的“迷你”容器并在其中运行一些 java 实例。
我的问题是:我正在尝试找到一种理想的方法来调整 OpenVZ 容器配置,以便更好地与 Java 内存配合使用。
请不要建议任何与 Java 设置相关的内容,我正在寻找 OpenVZ 特定的答案。不过,如果您觉得任何建议可能对我有帮助,我欢迎您。
非常感谢,丹尼尔
答案1
您必须使用 RHEL6(又名 2.6.32-,又名 042stab)内核并使用 VSwap 配置容器。请参阅http://openvz.org/VSwap了解更多详情。新安装时默认会这样做。
如果您想要迷你容器,请分配所需的 RAM,然后分配两到四倍的交换量,以启用 CT 内存的一些“拉伸”。例如,对于 256M,这将是
vzctl 设置 $CTID --ram 256M --swap 1G --save
确保其他 beancounter(尤其是 privvmpages)设置为无限制。再次查看 http://openvz.org/VSwap更多细节。
答案2
如果问题可能只是对 -Xmx 选项的误解,为什么要排除 java 设置?
我认为 2 GB 或 RAM 对于 1.5 GB 的堆来说是正确的大小。堆只是 JVM 使用的内存的一部分。本机代码(包括 JVM 代码本身)、本机库使用的内存、代码缓存、基于堆栈的内存(每个线程都有自己的堆栈)和永久代都存储在堆之外。