【问题标题】:Java process using more RAM than assigned?Java 进程使用的 RAM 多于分配的 RAM?
【发布时间】:2012-07-22 11:11:11
【问题描述】:

基本上我在 Centos 6.2 16GB 系统上运行我的世界服务器

我通过 rtoolkit 启动来启动我的服务器,现在我分配它使用 12GB,但是它使用的 muc 不止于此,我不知道为什么。 我运行这个命令来运行 jar 文件:

java -Xmx30M -Xms30M -XX:MaxPermSize=40M -jar Minecraft_RKit.jar USER:PASS

然后使用以下命令运行进程:

java -Xms12288M -Xmx12288M -Djline.terminal=jline.UnsupportedTerminal -jar /home/craftbukkit.jar nogui

现在,如果我查看我的 Webmin 模块,我可以看到它正在使用 18025792 kB 的 RAM。比我分配的要多得多。这随后导致进程使用过多内存,以至于系统崩溃。

我可能在这里犯了一个愚蠢的错误,但如果有人能对这种情况有所了解,我将不胜感激。

非常感谢。

【问题讨论】:

    标签: java linux memory centos minecraft


    【解决方案1】:

    JVM 中很少有其他内存使用者:

    • 在 64 位操作系统上 each thread needs at least a MiB of memory。 5000 个线程(不太可能,但如果这是服务器)可以填补 12 GiB 的分配堆和 17 GiB 的已用内存之间的差距

    • 本机代码有自己的堆

    • 第二个命令行中没有提到 PermGen 设置

    【讨论】:

      【解决方案2】:

      您正在设置最大堆大小,这通常是最大的但不是全部的内存使用量。

      你有线程本地堆栈(如果你有很多,这可以加起来 GB)、共享库代码和 C 库使用的任何内存。

      顺便说一句,16 GB 是 17,179,000,000 字节。

      【讨论】:

        【解决方案3】:

        另一种可能的解释(除了线程堆栈、permgen 和本机堆)是 Minecraft 服务器可能正在使用大型内存映射文件或类似的东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-03
          • 2017-04-14
          • 1970-01-01
          • 2021-09-06
          • 2012-06-08
          • 2013-09-26
          相关资源
          最近更新 更多