如何在CentOS 6中限制Java分配的内存?

时间:2016-04-19 13:40:48

标签: java memory centos cluster-computing

我有一个使用10个线程的Java应用程序。每个线程都使用Java Matlabcontrol库打开Matlab会话。我在运行CentOS 6的集群上运行应用程序。

整个应用程序使用的物理内存(Max Memory)大约为5GB(如预期的那样),但保留的物理内存(Max Swap)大约为80GB,这太高了。这里是集群维基的简短描述:

  

关于术语的说明:在LSF中,Max Swap是由分配的内存   应用程序和最大内存是物理上使用的内存(即,   实际上写的是)。因此,Max Swap>最大记忆。多数情况   应用Max Swap比Max Memory高出约10-20%

我认为问题是Java(或者Java和Matlab之间的混合)。默认情况下,Java倾向于在计算节点上分配大约50%的物理可用内存。 Java进程假定它可以使用运行它的系统上的所有可用资源。这也是它启动数百个线程的原因(尽管我的应用程序只使用了11个线程)。它可以看到24个内核和大量内存,即使批处理系统只为该作业保留了11个内核。

此问题是否有解决方法?

编辑:我刚刚在Matlabcontrol文档中找到以下行:

  

在MATLAB外部运行时,代理使用多个   内部管理的线程。当代理断开连接时   MATLAB它通知其断开连接侦听器,然后终止所有   它在内部使用的线程。代理可以与MATLAB断开连接   不通过调用disconnect()退出MATLAB。

这解释了为什么创建了很多线程,但它没有解释大量的保留内存。

Edit2:设置MALLOC_ARENA_MAX=4环境变量使预留内存量降至30GB。我应该选择MALLOC_ARENA_MAX的值,还有其他调整可能性吗?

0 个答案:

没有答案