如何限制Java VM整体内存消耗?

时间:2013-09-22 10:23:05

标签: java linux memory jvm

我在Linux-Cluster上运行Java应用程序,SLURM作为资源管理器。要运行我的应用程序,我必须为SLURM指定我需要的内存量。 SLURM将在具有指定内存量的VM中运行我的应用程序。要告诉我的java应用程序它可以使用多少内存,我使用“-Xmx ## g”参数。我选择它比SLURM要求的要少1GB。

我的问题是我超出了我在SLURM上选择的内存量,它终止了我的应用程序。似乎JVM使用大约1GB的内存,可能用于像GC这样的东西。

是否有可能限制JVM的大小或至少驯服它。

干杯, 马库斯

1 个答案:

答案 0 :(得分:3)

最大堆设置仅限制最大堆。还有其他一些您没有限制的内存区域,例如

  • 线程堆栈
  • perm gen
  • 共享库
  • 库使用的本机内存
  • 直接记忆
  • 内存映射文件。

如果要限制所有内存使用量,则需要明确是否要限制虚拟内存或驻留内存。通常,监控工具会出现监控虚拟内存的错误,这表明人们对应用程序的工作方式缺乏了解,甚至无法首先监控应用程序。

您希望监视驻留内存使用情况,这意味着您需要知道应用程序在堆中的时间内使用了多少内存,然后计算出您可以拥有多少堆以及一些错误余量。

  

。要告诉我的java应用程序它可以使用多少内存,我使用“-Xmx ## g”参数。我选择它比SLURM要求的要少1GB。

猜测我会以-Xmx512m的1/2 GB开始,看看峰值常驻内存是什么,如果你发现总有几百MB的空间,那就增加它。

BTW 1 GB内存这些天的成本并不高(仅为5美元)。您的时间可能远远超过您想要保存的资源。