我已经购买了具有 2GB 内存和 Debian x64 的 VPS 服务器。当我想使用以下命令运行 Minecraft 服务器时:
screen java -Xmx1600M -Xms1600M -jar craftbukkit.jar
但服务器不断关闭并显示信息[screen is terminating],在日志中我可以找到:http://pastebin.com /YupAEnyN
系统使用的内存不足:http: //i.stack.imgur.com/2Yrl2.png
不幸的是,我无法进行交换,因为 VPS 在 OpenVM 下工作。
如果我想用尽可能多的 RAM 运行服务器,我应该怎么做?服务器正在运行 -Xms1536M -Xmx1536M 但我想获得更多...
感谢您的提前!
问问题
820 次
1 回答
2
我认为您需要减少内存设置而不是尝试增加它们。
请注意,错误是Native memory allocation (malloc) failed
-Xmx 标志会增加 Java 堆内存。它为 Java 代码提供了更多内存。但是,这不是您的问题所在。Java 有足够的内存。该错误表明本机代码内存不足。
假设使用 2GB 的 RAM,Java 进程将有 1.7GB 可用。这是绝对不能超过的操作系统定义的限制。(我不知道你的系统的真正价值是多少,我只是假装它是 1.7GB) 现在你指定 -Xms1600M。您刚刚为 Java 代码保留了 1.6GB,并为任何其他本机代码留下了微不足道的 100MB。
如果是我,我会从 -Xms1024 -Xmx1024 开始,为 Java 代码提供 1GB 的空间,为其他本机代码提供数百 MB 的空间。只有当进程开始在 Java 代码(不是本机代码)中出现 OutOfMemory 异常时,我才会考虑提高这些值。
这整个事情是相当违反直觉的。有关更深入的解释,请参阅以下文章: http ://www.ibm.com/developerworks/linux/library/j-nativememory-linux/index.html
于 2012-11-12T19:18:16.723 回答