Main Content

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

故障排除和调试

附加文件大小限制

一项作业的所有附加文件的总大小限制为 4 GB。

文件访问和权限

确保使用 Windows 操作系统的工作人员可以访问文件

默认情况下,Windows® 操作系统上的工作进程安装为以 LocalSystem 身份运行的服务,因此它无法访问映射的网络驱动器。

网络通常配置为不允许以 LocalSystem 身份运行的服务访问 UNC 或映射的网络共享。在这种情况下,您必须在具有作为服务登录权限的不同用户下运行 mjs 服务。请参阅 MATLAB® Parallel Server™ 系统管理员指南中的设置用户 (MATLAB Parallel Server) 部分。

任务函数不可用

如果工作进程无法找到任务函数,它会返回错误消息

Error using ==> feval
      Undefined command/function 'function_name'.

运行该任务的工作进程无权访问函数 function_name。一种解决方案是确保函数文件 function_name.m 的位置包含在作业的 AdditionalPaths 属性中。另一个解决方案是通过将 function_name.m 添加到作业的 AttachedFiles 属性来将函数文件转移给工作进程。

加载和保存错误

如果工作进程无法保存或加载文件,您可能会看到错误消息

??? Error using ==> save
Unable to write file myfile.mat: permission denied.
??? Error using ==> load
Unable to read file myfile.mat: No such file or directory.

在确定此错误的原因时,请考虑以下问题:

  • 工作人员当前的文件夹是什么?

  • 工作进程能找到该文件或文件夹吗?

  • 工作进程以什么用户身份运行?

  • 工作进程是否有权限读取或写入相关文件?

任务或作业保持排队状态

作业或任务可能会卡在排队状态。要调查此问题的原因,请查找调度程序的日志:

  • Spectrum LSF® 调度器可能会发送带有错误消息的电子邮件。

  • Microsoft® Windows HPC Server(包括 CCS)、LSF®、PBS Pro® 和 TORQUE 将输出消息保存在调试日志中。参见 getDebugLog 参考页。

  • 如果使用通用调度器,请确保提交函数将错误消息重定向到日志文件。

造成该问题的可能原因有:

  • 由于许可错误,MATLAB 工作进程无法启动,可执行文件不在工作进程机器的默认路径上,或者没有安装在调度器预期的位置。

  • MATLAB 无法读取/写入调度程序的作业存储位置中的作业输入/输出文件。所有工作进程节点可能无法访问该存储位置,或者 MATLAB 运行的用户没有读取/写入作业文件的权限。

  • 如果使用通用调度器:

    • 在 MATLAB 工作进程启动之前,环境变量 PARALLEL_SERVER_DECODE_FUNCTION 未定义。

    • 解码函数不在工作进程的路径上。

没有结果或作业失败

任务错误

如果您的作业没有返回结果(即,fetchOutputs(job) 返回一个空的单元格数组),则很可能是该作业失败了,并且它的某些任务已设置其 Error 属性。

您可以使用以下代码来识别带有错误消息的任务:

errmsgs = get(yourjob.Tasks, {'ErrorMessage'});
nonempty = ~cellfun(@isempty, errmsgs);
celldisp(errmsgs(nonempty));

此代码显示在作业对象 yourjob 中找到的任务的非空错误消息。

调试日志

如果您正在使用受支持的第三方调度器,则可以使用 getDebugLog 函数从调度器中读取特定作业或任务的调试日志。

例如,在您的 LSF 调度器上找到失败的作业,并阅读其调试日志:

c = parcluster('my_lsf_profile')
failedjob = findJob(c, 'State', 'failed');
message = getDebugLog(c, failedjob(1))

客户端与 MATLAB 作业调度器之间的连接问题

要测试客户端计算机和计算集群的机器之间的连接,您可以使用管理中心。有关管理中心的更多信息,包括如何启动它以及如何测试连接,请参阅 启动管理中心 (MATLAB Parallel Server)在管理中心测试 MATLAB 作业调度器集群连接 (MATLAB Parallel Server)

有关诊断客户端与 MATLAB 作业调度器之间的连接问题的其他方法的详细说明,可在 MathWorks 网站上列出的某些 Bug 报告中找到。

以下部分可以帮助您识别某些连接问题的一般性质。

客户端无法看到 MATLAB 作业调度器

如果您无法使用 parcluster 找到或连接到 MATLAB 作业调度器,则最可能的失败原因是:

  • MATLAB 作业调度器当前未运行。

  • 防火墙不允许从客户端端到 MATLAB 作业调度器的流量。

  • 客户端和 MATLAB 作业调度器运行的软件版本不同。

  • 客户端和 MATLAB 作业调度器无法解析彼此的短主机名。

  • MATLAB 作业调度器正在使用 mjs_def 文件中定义的非默认 BASE_PORT 设置,并且集群配置文件中的 Host 属性未指定此端口。

MATLAB 作业调度器无法看到客户端

如果警告消息表明 MATLAB 作业调度器无法打开与客户端计算机的 TCP 连接,则最可能的原因是

  • 防火墙不允许从 MATLAB 作业调度器到客户端的流量。

  • MATLAB 作业调度器无法解析客户端计算机的短主机名。使用 pctconfig 更改 MATLAB 作业调度器用于联系客户端的主机名。

“您的 shell 的一个初始化文件包含一个正在写入标准输出的命令...”

具有非共享文件系统的通用调度器的示例代码联系 sftp 服务器来处理往返于集群文件系统的文件传输。这种 sftp 的使用容易受到所有常见 sftp 漏洞的影响。可能发生的一个问题会导致类似如下的错误消息:

One of your shell's init files contains a command that is writing to stdout,
interfering with RemoteClusterAccess.
The stdout read was:
<some output>

Find and wrap the command with a conditional test, such as

	if ($?TERM != 0) then
		if ("$TERM" != "dumb") then
			<your command>
		endif
	endif

sftp 服务器启动一个 shell(通常是 bash 或 tcsh),以便在传输文件之前适当地设置您的标准读写权限。服务器以标准方式初始化 shell,调用.bashrc 和.cshrc 之类的文件。如果您的 shell 在启动时向标准输出发出文本,则会出现问题。该文本被传回至在 MATLAB 内运行的 sftp 客户端,并被解释为 sftp 服务器的响应消息的大小。

要解决此错误,请找到发出文本的 shell 启动文件代码,然后将其删除或将其括在 if 语句中,以查看 sftp 服务器是否正在启动 shell:

if ($?TERM != 0) then
    if ("$TERM" != "dumb") then
        /your command/
    endif
endif

您可以在 MATLAB 之外使用标准 UNIX 或 Windows sftp 命令行客户端进行测试,然后在 MATLAB 中重试。如果问题未解决,则错误消息仍然存在:

> sftp yourSubmitMachine
Connecting to yourSubmitMachine...
Received message too long 1718579042

如果问题已解决,您应该看到:

> sftp yourSubmitMachine
Connecting to yourSubmitMachine...