我最近在 VPS 上部署了一个 Java 应用程序,但它不断崩溃,因为 JVM 一段时间后内存耗尽。由于有交换,我在其他“低内存”服务器上从未遇到过此问题,但在这个 VPS 上,情况有所不同:没有交换,实际 512MB 内存中只有 50%“可用”(他们说保证 256MB)。有什么方法可以限制内存消耗?我尝试过使用 xms 变量,但没什么用。我也尝试过将交换放入文件中,但显然不允许。
提前致谢
答案1
是的,你可以限制 Java 内存消耗。例如:http://viralpatel.net/blogs/2009/01/jvm-java-increase-heap-size-setting-heap-size-jvm-heap.html
但是 256M 对于 Java 世界来说太小了。我建议你买一个更好的 VPS。
答案2
您可以在 VM 启动参数中限制 VM 可用的内存。也就是说,如果应用程序需要 1GB,它就需要 1GB。限制 VM 不会有帮助(应用程序可能会因内存不足而崩溃)。
如今 512MB 已经非常小了。256MB 甚至更低。根据应用程序的不同,更好的解决方案是“获取能够运行该应用程序的服务器”。
答案3
看起来您正在使用基于 OpenVZ 或 Virtuozzo 的 VPS。如果是这样,可能需要将“ulimit -s 1024”添加到 /etc/profile 和 /etc/init.d/* 启动脚本中。OpenVZ 和 Virtuozzo 内存核算将为堆栈保留的写时复制内存计为实际使用量,并且保留堆栈内存的默认值相当高(8 到 10Mb,具体取决于您的发行版)。