为什么我的Minecraft服务器总是使用100%的可用RAM?

2021-02-12 22:11

我有一个minecraft服务器(1.16.5),托管在一个VPS上,有16GB的内存,我和8个朋友在服务器上玩,它使用了我所有的内存,我们玩香草生存,但我看不出这会如何导

解答动态

  • 您正在设置这两个选项:
    -Xms14G-Xmx14G
    This意味着JVM应该从14gb(-Xms)开始,并增长到14gb(-Xmx)堆RAM的最大使用量。实际的RAM使用率会更高,因为java本身、加载的类、垃圾收集临时内部等都需要一些空间。这反过来意味着JVM从一开始就将分配接近16 GB的内存。
    现在,在Linux系统上,这不会在一开始就物理分配所有14 GB的堆—JVM要求Linux分配14 GB的内存GB,Linux告诉JVM“给你”,但是那些ram页面只有在被写入之后才会被分配给JVM。在JVM真正写入所有RAM之前,它需要几秒钟到1-2小时的播放时间,所以到那时,OS至少会有一部分RAM到自己。一旦14 GB被填满,Java将开始它的第一次垃圾回收-因此它将在内部释放大量内存,但不会将这些内存返回给您的系统。
    这意味着您的Linux的磁盘缓存非常低,这意味着比必要的磁盘访问要多得多,这通常意味着很多延迟。(这在VPS上可能更好一些,在VPS上磁盘访问通过主机,主机本身可能有一些缓存)。
    您真正应该做的是将-Xms和-Xmx参数降低到可用RAM的一半,在您的情况下是8GB。然后,通过打开GC日志并检查日志文件,检查Minecraft真正需要多少RAM。
    对于java14(您应该与纸张一起使用),将其添加到javai中位置:
    Xlog:gc*:gc.log日志:时间,级别,标记:filecount=5,filesize=1024k 这将生成一个名为gc.log日志在服务器目录中(加上,随着时间的推移,一些老一代人gc.log日志.0等等。这些文件包含关于每次GC运行的信息,有趣的行如下所示这个:年轻人(正常)(G1疏散暂停)10247M-gt;0.0B(8176.0M)幸存者:16.0M-gt;2790.4M(16.0G)] 在本例中,您感兴趣的是堆值:这里,16GB来自-Xmx,10.7GB在GC之前使用,2790MB在GC之后使用。

    • 我关心的JVM参数之一--XX:+DisableExplicitGC.
      Minecraft-Java服务器是基于Java的,因此在Java虚拟机(JVM)中运行。在startup命令中提供的参数告诉JVM如何操作、使用什么配置等。
      根据Oracle文档(Oracle拥有Java):
      使用-XX:+DisableExplicitGC禁用对垃圾回收(). 请注意,JVM在必要时仍然执行垃圾收集。
      通过提供此参数,您告诉服务器的JVM禁用系统垃圾收集。在不太详细的情况下,垃圾收集器会自动管理Java程序的内存。正如引用所说,它仍将根据需要执行垃圾收集,但在您的情况下似乎不需要这样做(可能是因为根据Xmx参数,您仍有~2Gb或RAM可用)。一位消息人士说,通过设置此参数,可能会延迟垃圾收集事件更长的时间。
      因此,我将尝试将参数更改为-XX:-DisableExplicitGC,或者干脆将其删除。

      • End

      免责声明:

      本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。