2

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

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

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

干杯,马库斯

4

1 回答 1

3

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

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

如果要限制总内存使用量,则需要明确是限制虚拟内存还是常驻内存。监控工具经常犯监控虚拟内存的错误,这表明对应用程序如何工作,甚至为什么首先监控应用程序缺乏理解。

您想要监控常驻内存使用情况,这意味着您需要知道您的应用程序在一段时间内使用了多少内存,而不是堆,然后计算出您可以拥有多少堆以及一些错误余量。

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

猜测我会从 1/2 GB 开始,-Xmx512m看看峰值驻留内存是多少,如果你发现总是有几百 MB 的空间,则增加它。

顺便说一句,如今 1 GB 内存的成本并不高(只要 5 美元)。您的时间可能比您试图节省的资源更有价值。

于 2013-09-22T10:36:07.627 回答