作为jsvc运行的Java应用程序比Heap+;永久性

作为jsvc运行的Java应用程序比Heap+;永久性,java,memory,heap,openjdk,jsvc,Java,Memory,Heap,Openjdk,Jsvc,我有以下服务器: Ubuntu服务器12.04 LTS 64位 没有GUI,只有命令行 4GB内存 2芯 除了Nagios NRPE和Webmin之外,没有其他东西在运行 vm.swappiness=0 这里没有什么特别之处,运行Java应用程序: 使用jsvc作为守护进程全天候运行 -Xmx2500M -XX:+UseConMarkSweepGC 未进行其他设置 使用OpenJDK7 JMX服务器已启用,并由nagios每分钟检查一次 但是,这不应该耗尽所有内存,并导致java应用程序

我有以下服务器:

  • Ubuntu服务器12.04 LTS 64位
  • 没有GUI,只有命令行
  • 4GB内存
  • 2芯
  • 除了Nagios NRPE和Webmin之外,没有其他东西在运行
  • vm.swappiness=0
这里没有什么特别之处,运行Java应用程序:

  • 使用jsvc作为守护进程全天候运行
  • -Xmx2500M
  • -XX:+UseConMarkSweepGC
  • 未进行其他设置
  • 使用OpenJDK7
  • JMX服务器已启用,并由nagios每分钟检查一次
但是,这不应该耗尽所有内存,并导致java应用程序不通过JMX响应nagios


为什么这会耗尽我所有的内存并创建交换?

尝试
-Xmx2500M
而不是
-Xmx=2500M

您不需要=,-X选项与使用=的-Dkey=value系统属性不同


您的-Xmx2500M是java应用程序中可用的最大堆大小。运行JVM和管理该堆中的对象的开销通常会增加50%,但可能是堆大小的两倍。Linuxtop命令将在虚拟内存使用情况中显示这一点

有关非堆内存使用的详细讨论,请参见链接的演示文稿。 关于这个话题还有另一个SO线索

在ubuntu上使用OpenJDK可以做的一个快速检查是运行jps查看它是哪个进程ID,然后jconsole,选择内存选项卡,然后选择非堆内存使用情况


如果您试图在没有交换的情况下运行,我猜您需要对不同的堆大小进行实验,以了解应用程序可以运行的场景

对不起,那是个打字错误。事实上,我没有
=