主要内容

本页采用了机器翻译。点击此处可查看英文原文。

解决 Linux 集群上的内存错误

问题

MATLAB® Parallel Server™ 服务在 Linux® 节点上创建的进程数量超过操作系统允许的限制时,这些服务将失败并引发内存不足错误。

如果您尝试在受影响的集群上运行一个作业,该作业将因如下错误而失败:

Error using parallel.Job/submit (line 304)
Java exception occurred:
java.lang.OutOfMemoryError: unable to create new native thread

可能的解决方案

在许多 Linux 发行版中,shell 的最大用户进程数限制 ulimit 默认值为 1024。用户限制控制着 shell 及其进程可用的资源。要查看 shell 的当前最大用户进程限制,请在集群中任一节点的命令行中运行以下命令。ulimit 命令可能要求 root 权限。

ulimit -u
请确保将最大用户进程数限制设置为 "unlimited",或者至少设置为推荐的最小值 23741。

例如,要将最大用户进程数限制设置为推荐的最小值,请运行以下命令。

ulimit -u 23741
请再次检查最大用户进程数限制,以确认新设置。

在某个 shell 中更改限制仅影响该 shell 以及随后在此处启动的任何 MATLAB Parallel Server 服务。要使此设置在整个系统范围内生效,必须修改 /etc/security/limits.conf 文件。对于 MATLAB 作业调度器集群节点,请修改 root 用户或 mjs 服务所运行的用户所对应的进程限制。

例如,要取消 root 用户的用户进程限制,请在 limits.conf 文件中添加以下这一行。编辑 limits.conf 文件可能要求 root 权限。

root        hard        nproc        unlimited
要解决整个集群的内存不足错误,请修改集群中每个节点的用户进程数量。

有关 ulimitlimits.conf 的更多信息,请参阅其手册页。

另请参阅

主题