Java进程使用的内存超过了分配的内存?

3

基本上,我在一个Centos 6.2 16GB系统上运行Minecraft服务器。

我通过rtoolkit引导启动我的服务器,现在我分配了12GB来使用它,但它使用的远远超过这个数量,我不知道为什么。

我运行以下命令来运行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。比我分配的要多得多。这随后导致进程使用了太多的内存,使系统崩溃。也许我在这里犯了一个愚蠢的错误,但我真的很感激任何人能为这种情况提供一些帮助。非常感谢。
3个回答

3

JVM中的其他内存消耗者:

  • 在64位操作系统上,每个线程至少需要1MB的内存。5000个线程(虽然不太可能,但如果是服务器的话)会填补分配的堆大小为12GB和已使用的17GB之间的差距。

  • 本地代码有自己的堆内存。

  • 您的第二个命令行中没有提及PermGen设置。


0

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

您有本地线程堆栈(如果有很多线程,则可能会增加到GB级别),共享库代码以及任何由C库使用的内存。

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


0

除了线程堆栈、PermGen 和本地堆之外,另一个可能的解释是 Minecraft 服务器可能正在使用大型内存映射文件或类似的东西。


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