在具有可突发式RAM的vServer上设置Java堆空间Xmx Xms

3
我们运行一个Minecraft服务器,它依赖于Java,并在具有1GB保证RAM和4GB可突发RAM的vServer上运行。
我们运行Debian 6.0(Squeeze)Minimal(64位),配备轻量级的lighttpd webserver和php / mySQL,以及实际的Minecraft服务器。我们目前已经设置好了一切,以保持在我们的1GB保证RAM内,但似乎我们没有利用可突发的RAM,也不知道该如何(如果需要的话)这样做。
我们当前使用以下字符串加载服务器:
 /opt/java/jre/bin/java -Xmx880M -Xms880M
                        -XX:+UseConcMarkSweepGC
                        -XX:+CMSIncrementalPacing
                        -XX:ParallelGCThreads=2
                        -XX:+AggressiveOpts
                        -jar craftbukkit.jar nogui

我们为Minecraft(大概)分配了880M,其余的用于系统、Web服务器等。我们如何优化这个设置?将初始启动分配到1GB以上并进入可突发RAM中是否有意义?Java或系统是否有办法自行处理,即在需要时分配超过880M的内存,在峰值时间达到4GB的最大值?由于可突发的RAM不能保证,如果它在需要时不可用会发生什么?谢谢!
2个回答

1
我们如何优化这个设置?
这要看情况。首先应该对这个进程的内存使用进行分析。添加

-verbose:gc:file=gc_results.out

回到你的命令行。您可以使用HPjmeter等工具打开生成的gc数据文件。您应该根据平均/峰值内存使用情况来调整堆。没有一个大小适合所有的策略是“最佳”的。作为一个开始,检查您平均花费多少时间在垃圾收集上。一个好的经验法则是小于7%。您触发完整GC的频率有多高?您的堆是否充满了长期存在的对象,还是被大量短期存在的对象轰炸?这些问题应该引导您的决策。


我会非常诚实地说:我从未听说过GC或知道它是什么。 - Jurgen
GC是垃圾回收机制。Java具有自动内存管理模型。 - Amir Afghani
我对实际运行在其中的进程(Minecraft服务器)没有任何控制权,也不知道它如何处理对象等技术细节。内存使用量似乎根据在线玩家数量波动,并且在负载和使用量高峰期可能会达到峰值。如果达到峰值并且没有足够的内存,Minecraft服务器将会崩溃。问题在于,即使我们当前的设置应该允许我们处理这些峰值,但它不能超过880。 - Jurgen
你是如何添加命令行选项的: -Xmx880M -Xms880M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts无论你是怎么做的,都请加上我给你的选项,让服务器运行一段时间,然后收集输出文件并进行分析。其他任何操作都只是猜测。 - Amir Afghani

0
一个服务器将会花费大部分时间来使用分配的最大内存。我对“可突发”的内存的理解是——不能依赖它,但如果你短暂地需要它,它可能不会崩溃。在这种情况下,您不希望您的JVM一直占用可突发内存。您指定的配置似乎是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接