解决 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有关 ulimit 或 limits.conf 的更多信息,请参阅其手册页。
另请参阅
主题
- 针对 Macintosh 和 Linux 的建议系统限制 (Parallel Computing Toolbox)
- 解决 MATLAB 作业调度器集群中的通信问题
- 解决错误:许可证签出失败